0

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

假设我有类似的实体:

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 不一致。

我知道如果我引入传真继承电话,我可以使它工作,但这仅适用于一张桌子。如果我有另一个电话类型列,我将不得不从电话创建另一种类型。我不认为这是可行的。

有没有办法使这项工作?

4

1 回答 1

0

我已经在我们的 CodePlex 网站上打开了一个问题来跟踪这个问题 - https://entityframework.codeplex.com/workitem/1247

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

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

于 2013-06-13T16:25:28.350 回答