我有一个预定义的数据库,我想使用实体框架4 CodeFirst进行映射。指定引用对象的实体框架中列的名称
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
到特定的ColumnName分配给Site