在表或多个具有不同可为空性的表中重用复杂类型?

时间:2013-05-29 16:30:12

标签: .net entity-framework

我正在尝试将复杂类型映射到表中的多个列或具有不同可为空性的多个表中。

假设我有类似的实体:

public class Phone
{
    public string Number { get; set; }
}

public class Contact
{
    public Phone CellPhone { get; set; }
    public Phone HomePhone { get; set; }
}

public class Organization
{
    public Phone PhoneNumber { get; set; }
    public Phone FaxNumber { get; set;}
}

,配置类似于:

public class ContactConfiguration
{
    public ContactConfiguration()
    {
        Property(x => x.CellPhone.Number).HasColumnName("CellPhone").IsRequired();
        Property(x => x.HomePhone.Number).HasColumnName("HomePhone").IsOptional();
    }
}

public class OrganizationConfiguration
{
    public OrganizationConfiguration()
    {
        Property(x => x.PhoneNumber.Number).HasColumnName("Phone").IsRequired();
        Property(x => x.FaxNumber.Number).HasColumnName("Fax").IsOptional();
    }
}

将手机映射到不同的列以获取不同的名称可以正常工作,但设置可空性则不行。 EF抱怨IsNull不一致。

我知道如果我介绍一个传真继承手机,我可以使它工作,但这只适用于一个表。如果我有另一列电话类型,我将不得不从电话创建另一种类型。我认为这不可行。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:0)

我在CodePlex网站上发布了一个跟踪此问题的问题 - https://entityframework.codeplex.com/workitem/1247

这是EF的一般限制(而不仅仅是Code First),是我们用来表示模型的格式的副作用。不幸的是,这很难改变,所以我们将无法在EF6版本中进行更改。我们必须考虑所需的工作量以及未来版本的变更优先级。

最好的解决方法是使用两种复杂类型RequiredPhone和OptionalPhone。