我有一个预定义的数据库,我想使用Entity Framework 4 CodeFirst进行映射。
由于EF4的映射约定,它在LCUSettings表中寻找一个名为SiteSiteId的列,但实际上该列名为Site_ID,因此无法找到。
在我的派生自DbContext的类中,我重写了OnModelCreating方法并设置了要使用的表名。
我收到了以下异常消息:
“类型“LcuSystemOnline.Models.Site”必须是非可空值类型,才能将其用作参数“T”的泛型类型或方法“System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration.Property(System.Linq.Expressions.Expression>)”中。”
我理解这个异常,但是我该如何让
public class Site
{
public int SiteId { get; set; }
public string SiteName { get; set; }
public DateTime InstallDate { get; set; }
public string Phase { get; set; }
public string Address { get; set; }
public string GpsPosition { get; set; }
public string NetworkDetail { get; set; }
public string SiteCode { get; set; }
public string UserGroupCode { get; set; }
public string InfrastructureNumber { get; set; }
public string Province { get; set; }
public virtual ICollection<LcuSetting> LcuSettings { get; set; }
}
还有另一个类
public class LcuSetting
{
public int LCUSettingId { get; set; }
[Column(Name="Site_Id")]
public Site Site { get; set; }
public string Name { get; set; }
public string IPAddress { get; set; }
public string SubnetMask { get; set; }
public string DefaultGateway { get; set; }
}
由于EF4的映射约定,它在LCUSettings表中寻找一个名为SiteSiteId的列,但实际上该列名为Site_ID,因此无法找到。
在我的派生自DbContext的类中,我重写了OnModelCreating方法并设置了要使用的表名。
modelBuilder.Entity<Site>().ToTable("Site");
这个很好运行。
然而,当我尝试指定列名时,如下所示:
modelBuilder.Entity<LcuSetting>().Property(c => c.Site).HasColumnName("Site_Id");
我收到了以下异常消息:
“类型“LcuSystemOnline.Models.Site”必须是非可空值类型,才能将其用作参数“T”的泛型类型或方法“System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration.Property(System.Linq.Expressions.Expression>)”中。”
我理解这个异常,但是我该如何让
modelBuilder
为Site
分配特定的ColumnName呢?