HasColumnType和数据库生成的正确用法是什么 [英] What is the proper usage of HasColumnType and Database generated

查看:54
本文介绍了HasColumnType和数据库生成的正确用法是什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将大约80个实体的基本EF模型从EF4迁移到EF6,并且还将其从Designer EDMX生成的数据库更改为Code First数据库.

I'm migrating a substantial EF model of ~80 entites from EF4 to EF6, and I'm also changing it from a Designer EDMX-generated database, to a Code First database.

现在,我正在使用EF fluent-api配置实体关系,但不确定我是否做得正确.

Right now I'm configuring the entity relationships using EF fluent-api, and I'm not certain I'm doing it correctly.

SQL Server数据库中的类型是 varchar(50),所以我应该像这样配置它吗?

It's type in the SQL Server database is varchar(50), so should I be configuring it like this?

        mb.Entity<SomeObject>()
            .Property(so => so.Type)
            .IsUnicode(false)
            .HasColumnName("Type")
            .HasColumnType("varchar")
            .HasMaxLength(50)
            .IsRequired()
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

还是这样,而没有 HasMaxLength(50)?

        mb.Entity<SomeObject>()
            .Property(crt => crt.Type)
            .IsUnicode(false)
            .HasColumnName("Type")
            .HasColumnType("varchar(50)")
            .IsRequired()
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

另外,说我还有一个具有GUID ID的对象:

Additionally, say I have another object with a GUID ID:

    mb.Entity<AnotherObject>()
        .Property(ao => ao.ID)
        .HasColumnName("ID")
        .HasColumnType("uniqueidentifier")
        .IsRequired()
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

在数据库中,它的默认值为 newsequentialid(),如果我要使用 DatabaseGeneratedOption.None DatabaseGeneratedOption.Identity ,还是 DatabaseGeneratedOption.Computed ?

In the database it has a default of newsequentialid(), should I be configuring it with DatabaseGeneratedOption.None, DatabaseGeneratedOption.Identity, or DatabaseGeneratedOption.Computed?

这些选项之间有什么区别?另外,在代码中,GUID大多是在对象实例化时分配的,就像这样:

What is the difference between those options? Additionally, in the code GUIDs are mostly being assigned at object instantiation, like so:

Guid ID = new Guid.NewGuid()

那合适吗?

推荐答案

varchar(50)本身不是列类型,'varchar'是数据类型,而(50)是字符串中字符的最大长度.你必须这样做

varchar(50) is not a column type itself, 'varchar' is a data type while (50) is the maximum length of characters in a string. you have to do it like this

mb.Entity<SomeObject>()
            .Property(so => so.Type)
            .IsUnicode(false)
            .HasColumnName("Type")
            .HasColumnType("varchar")
            .HasMaxLength(50)
            .IsRequired()
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

对于第二个问题,如果不提供GUID,它将在数据库设置中设置为GUID的默认值,如果要设置它,请使用GUID生成器类.

for your second question, if you dont give GUID, it will be set to default value of GUID in the settings of the database, if you want to set it, use the GUID generator class.

这篇关于HasColumnType和数据库生成的正确用法是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆