当我在SQL Management Studio中工作时,我习惯于经常映射关系(通常是一对多)。通常我这样做是为了创建各种自定义视图来帮助我优化和以其他方式制定表输出等。所以我理解并看到在SQL数据库的表中定义关系的价值。
现在我进入实体框架(从Linq2SQL转移)。主要使用SQL数据库驱动的模型设计器。我看到如何在EF设计师中映射关系。不是太难。但我的问题是......那是什么?
我们说我会映射两张表格' Invoice'到' InvoiceItems' EF设计师(一对多)。这对我有什么帮助?为什么不在SQL服务器上映射关系并导入视图以执行我想要做的任何事情?它是否有助于制定LINQ查询?如果我从'发票中删除发票记录' EF会自动删除InvoiceItems'?
中的子记录我非常喜欢使用EF,但我不了解EF设计师中关系映射的重要性。感谢您的任何澄清。
答案 0 :(得分:3)
这对我有什么帮助?
通过向您的实体添加导航属性有助于您不必经常加入两个实体 - 因此您的代码如下所示:
foreach(InvoiceItem item in invoice.ItemDetails)
而不是
foreach(InvoiceItem item in db.InvoiceItems.Where(ii => ii.InvoiceID == invoice.InvoiceID))
为什么不在SQL服务器上映射关系并导入视图以执行我想做的任何事情?
如果你做数据库优先设计,你当然可以。 EF将自动创建反映数据库中关系的导航属性。
如果我从'发票'中删除发票记录,EF会自动删除'InvoiceItems'中的子记录吗?
不,但如果您的数据库级联删除,则删除父级时将删除它们。否则,您需要有意删除子项。如果您正在进行代码优先开发,则可以使用Fluent API将级联删除添加到EF模型。