c# - 复杂类型 : multiple instances in one model?

标签 c# entity-framework ef-code-first

有没有办法使用 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/

相关文章:

c# - Entity Framework 选择查询

entity-framework - EF6 : Composite Primary Key Field as Foreign Key (ALTER TABLE statement conflicted with the FOREIGN KEY constraint)

asp.net-mvc-3 - EF 4.1 Code First 多重多对多关系

c# 6 主构造函数

C# 可选参数或方法重载?

c# - 打印文档

c# - CaSTLe.Windsor 3.1 - 组件激活器 : could not proxy <FactoryName>

asp.net-mvc - MVC4 中 Create() 方法的奇怪行为 - 新对象设置为 ID = 0,另存为其他内容

entity-framework - 在对数据库进行逆向工程时改进导航属性名称

c# - 如何用空格表示枚举值?