我正在将大约 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()
这样合适吗?