如果我有一位客户进行查询(仅允许一项查询),我是否有:
public class Customer
{
public string Name {get;set;}
public string ContactNumber {get;set;}
public virtual Inquiry Inquiry {get;set;}
}
public class Inquiry
{
public string Product {get;set;}
public string Information {get;set;}
public string Reason {get;set;}
}
还是我有这样的:
public class Customer
{
public string Name {get;set;}
public string ContactNumber {get;set;}
}
public class Inquiry
{
public string Product {get;set;}
public string Information {get;set;}
public string Reason {get;set;}
public virtual Contact Contact {get;set;}
}
在第一种情况下,我很确定如果一个Inquiry
被删除,Customer
也会被删除,除非我使用public Guid? InquiryId {get;set;}
导航属性。这种情况确实更有意义。
在第二种情况下,我很确定如果 aCustomer
被删除,那么Inquiry
将被删除,这是预期的效果。但它确实使导航属性有点多余,因为您想查看客户所做的customer => inquiry
查询,而不是客户所做的查询inquiry.FirstOrDefault(x => x.Customer.Id.Equals(customerId))
。
一方面,该Delete On Cascade
属性有帮助,但导航属性是多余的,但另一方面Delete On Cascade
无济于事(并且需要更多代码才能使其正常工作),但导航属性很有帮助。
那么你如何决定走哪条路呢?
我认为第一种情况的另一个缺点是您必须手动删除相关的Inquiry
,因为当您删除它时,Customer
它只会忽略级联(因为它已在代码中关闭)。