kpk*_*k47 6 c# entity-framework fluent-interface
我正在将大约EF模型从EF4迁移到EF6的大约EF模型,我也将它从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);
Run Code Online (Sandbox Code Playgroud)
或者像这样,没有HasMaxLength(50)?
mb.Entity<SomeObject>()
.Property(crt => crt.Type)
.IsUnicode(false)
.HasColumnName("Type")
.HasColumnType("varchar(50)")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)
另外,假设我有另一个带有GUID ID的对象:
mb.Entity<AnotherObject>()
.Property(ao => ao.ID)
.HasColumnName("ID")
.HasColumnType("uniqueidentifier")
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)
在数据库中它有一个默认的newsequentialid(),我应该是配置方面DatabaseGeneratedOption.None,DatabaseGeneratedOption.Identity或DatabaseGeneratedOption.Computed?
这些选项有什么区别?此外,在代码中,GUID主要在对象实例化时分配,如下所示:
Guid ID = new Guid.NewGuid()
Run Code Online (Sandbox Code Playgroud)
这合适吗?
小智 12
varchar(50)本身不是列类型,'varchar'是数据类型,而(50)是字符串中字符的最大长度.你必须这样做
mb.Entity<SomeObject>()
.Property(so => so.Type)
.IsUnicode(false)
.HasColumnName("Type")
.HasColumnType("varchar")
.HasMaxLength(50)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,如果你不给GUID,它将在数据库的设置中设置为GUID的默认值,如果你想设置它,使用GUID生成器类.