两种可选的一对一EF关系

时间:2018-02-10 17:59:09

标签: asp.net-mvc entity-framework one-to-one

是否可以在SQL中构建两个可选的一对一关系?

我想要:

public class EventInvoice
    {
        [Key]
        public int ID { get; set; }

        [ForeignKey("SZ_Event")]
        public Nullable<int> SZ_EventID { get; set; }
        public virtual SzopbudkaEvent SZ_Event { get; set; }

        [ForeignKey("UP_Event")]
        public Nullable<int> UP_EventID { get; set; }
        public virtual Event UP_Event { get; set; }
    }

public class Event
{
    [Key]
    public int EventID { get; set; }

    public virtual EventInvoice EventInvoice { get; set; }
} 

public class SzopbudkaEvent
    {
        [Key]
        public int ID { get; set; }

        public virtual EventInvoice EventInvoice { get; set; }
    }

我的发票只能与其中一个对象(Event或SzopbudkaEvent)合并。是否可以像这样使用它,或者我必须写一些不同的东西?

1 个答案:

答案 0 :(得分:0)

你可以做到这一点,但在mond中有两件事要做。

如果约束只有一个FK可以存在,那么在数据库中,EventInvoice故事中的FK列必须是可空的。你有这个,但我想我会强调它。

如果还存在一个必须存在其中一个的约束(两个都不允许),那么你必须弄清楚如何验证该约束。在DB中我会使用一个触发器fir插件,如果两者都为null则更新会引发异常。我在代码中使用预保存检查进行匹配:this描述了使用Validate方法实现接口IValidatableObject,当对象受SaveChanges影响时,EF将调用该方法。