Tengo una base de datos predefinida que quiero asignar usando Entity Framework 4 CodeFirst.Especificación del nombre de una columna en Entity Framework para un objeto referenciado
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; }
}
Y otra clase
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; }
}
Debido a las convenciones de asignación de EF4 que está buscando una columna SiteSiteId
en los LCUSettings de mesa, que no se puede encontrar, ya que la columna es en realidad el nombre Site_ID
En mi clase derivada DbContext
, anulo el método OnModelCreating
y configuro los nombres de las tablas para usar.
modelBuilder.Entity<Site>().ToTable("Site");
esto funciona bien.
Cuando intento para especificar el nombre de la columna sin embargo, de la siguiente manera
modelBuilder.Entity<LcuSetting>().Property(c => c.Site).HasColumnName("Site_Id");
recibo el siguiente mensaje de excepción
El tipo 'LcuSystemOnline.Models.Site' debe ser un no anulable tipo de valor para usarlo como parámetro 'T' en el tipo genérico o método 'System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration.Property (System.Linq.Expressions.Expression>)'
entiendo la excepción, pero ¿cómo puedo obtener la forma en la modelBuilder
para asignar un ColumnName específica a la Site