HasColumnType 和 Database generated 的正确用法是什么

2024-01-18

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

现在,我正在使用 EF Fluent-api 配置实体关系,但我不确定是否正确执行。

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

        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 的对象:

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

在数据库中它有一个默认值newsequentialid(),我应该配置它吗DatabaseGeneratedOption.None, DatabaseGeneratedOption.Identity, or DatabaseGeneratedOption.Computed?

这些选项有什么区别? 此外,在代码中 GUID 大多数是在对象实例化时分配的,如下所示:

Guid ID = new Guid.NewGuid()

这样合适吗?


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HasColumnType 和 Database generated 的正确用法是什么 的相关文章

随机推荐