带有两个外键的代码第一个表,如果另一个具有值,则该表应为空

时间:2018-12-19 12:37:47

标签: c# asp.net entity-framework ef-code-first check-constraints

好吧,我正在尝试对我的表应用检查约束!因此,我有一个国家代表,每个国家都应有一个IndividualOrganization但不是两个都有一个代表;

例如,如果Individual代表国家,则OrganizationId应该是null

如何使用代码优先数据注释或如果有其他方法来应用此检查约束。

这是我的代码:

    class CountryRepresentative
{
    [Column(Order = 0), Key, ForeignKey("Incident")]
    public Guid CountryId { get; set; }

    [Column(Order = 1), ForeignKey("Organization")]
    public int OrganizationId { get; set; }

    [Column(Order = 2), ForeignKey("Individual")]
    public int IndividualId { get; set; }

    public virtual Organization Organization { get; set; }

    public virtual Individual Individual { get; set; }

    public virtual Incident Incident { get; set; }
}

我希望一切都清楚。 谢谢队友

1 个答案:

答案 0 :(得分:0)

我将使用Fluent API手动定义约束:

migrationBuilder.Sql("ADD CONSTRAINT CK_ONLY_ONE_VAL CHECK 
                    ((nullif(one,'') is null or nullif(other,'') is null) 
                    and not (nullif(one,'') is null and nullif(other,'') is null) );");

nullif()将有助于检查空值并将其转换为null ...