是否可以在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)合并。是否可以像这样使用它,或者我必须写一些不同的东西?
答案 0 :(得分:0)
你可以做到这一点,但在mond中有两件事要做。
如果约束只有一个FK可以存在,那么在数据库中,EventInvoice故事中的FK列必须是可空的。你有这个,但我想我会强调它。
如果还存在一个必须存在其中一个的约束(两个都不允许),那么你必须弄清楚如何验证该约束。在DB中我会使用一个触发器fir插件,如果两者都为null则更新会引发异常。我在代码中使用预保存检查进行匹配:this描述了使用Validate方法实现接口IValidatableObject,当对象受SaveChanges影响时,EF将调用该方法。