有没有办法使用 Fluent api 模型构建器在同一个模型中拥有复杂类型的多个实例?
public class Contact
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Address PersonalAddress { get; set; }
public Address BusinessAddress { get; set; }
}
public class Address
{
public string Street{ get; set; }
public string City{ get; set; }
public string PostalCode{ get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ContactConfiguration());
modelBuilder.Configurations.Add(new AddressConfiguration());
}
============================================= ===================================
public class AddressConfiguration : ComplexTypeConfiguration<Address>
{
public AddressConfiguration()
{
//props
this.Property(t => t.Street)
.IsOptional()
.HasColumnName("AddressStreet")
.HasMaxLength(1024);
this.Property(t => t.PostalCode)
.IsOptional()
.HasColumnName("AddressPostalCode")
.HasMaxLength(64);
this.Property(t => t.City)
.IsOptional()
.HasColumnName("AddressCity")
.HasMaxLength(512);
}
}
最佳答案
对于 EF 6,当您使用相同复杂类型的多个实例时,Code First 将在列名称前加上您的属性名称前缀,例如
PersonalAddress_Street
BusinessAddress_Street
...
等等。您只需要映射旧版本的 EF。映射选项还允许您用更好的名称替换这些自动生成的名称。
此外,根据您的模型,我认为这不是正确的配置代码(可能是拼写错误?):
this.Property(t => t.PersonalAddress.Address.Street)
// should be
this.Property(t => t.PersonalAddress.Street)
关于c# - 复杂类型 : multiple instances in one model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311680/