【问题标题】:relationship between entities in c#, necessary?c#中实体之间的关系,有必要吗?
【发布时间】:2012-04-15 10:14:31
【问题描述】:

关于主题,一些实体有多重关系

我在学习中学到了所有这些,但是,是否有必要在 c# 编程中进行维护,例如在本示例中使用实体框架? :

http://www.asp.net/web-forms/tutorials/getting-started-with-ef/the-entity-framework-and-aspnet-getting-started-part-1

这是因为我对实体更新的工作原理感到困惑,例如级联以及为什么它很重要。

我发现将彼此独立的实体编码更容易,尽管它们在现实生活中实际上是相关的,例如类别产品。

谁能在问题中简要说明 CRUD 如何处理这种关系?

【问题讨论】:

  • 指向一篇文章很好(但我们试图从中猜测是浪费时间)但最好给我们一个小例子,最能说明您需要解释的内容
  • 我想知道 CRUD 操作如何与实体框架或面向对象编程一起工作,因为我的数据库或类设计实践通常与任何其他实体没有任何关系。例如,Invoice 和 InvoiceItem 类虽然作为父子类相关,但我从未将它们通过图表在数据库中链接在一起,也从未在代码级别将它们链接起来。因此,我必须编写 2 个删除语句才能删除这 2 个项目。根据下面derSteve提到的我的理解,在关系中,删除Invoice也会通过pk/fk删除InvoiceItem。
  • 您确实可以定义一个关联来将删除级联到一个孤立实体。请参阅该 msdn 页面上有关该主题的最后一段 msdn.microsoft.com/en-us/library/ee373856.aspx

标签: entity-framework oop entity-relationship object-oriented-database


【解决方案1】:

实体框架及其实体及其相互之间的关联为您提供了框架本身 - OR - 映射器 - 为您处理所有更新、删除和插入的优势。它负责维护实体和实体本身之间的关系。您“只”需要定义模型。

您始终可以走手动路线并自己编写所有代码。但在大多数情况下,定义实体及其属性和它们之间的关系,并让实体框架或任何其他 OR-Mapper(如 nHibernater)处理所有这些,这在开发速度、可维护性和一致性方面是一个巨大的优势。

如果您定义彼此分开的实体 - 换句话说,您不使用它们之间的关联 - 您无法从一个对象导航到另一个对象。看例子:

示例 a) 已定义关联:

2 个实体:order 和 orderitem 一个订单最多可以有 n 个订单项目。您可以从特定订单遍历/导航到所有关联的订单项目,例如

var myOrder = Repository.FindOrderById(15);
var orderItems = myorder.OrderItems;

示例 b) 未定义关联:

2 个实体:order 和 orderitem 如果没有定义关联,您将无法从一个实体导航到另一个实体。您需要分别查询所有订单商品,例如

var myOrder = Respository.FindOrderById(15);
var orderItems = Repository.FindOrderItemsByOrder(15);

这并不是说实体是如何加载的。在示例 b 中,为了查询订单和相关的订单项目,OR-Mapper 对数据库执行 2 次查询。在示例 a 中,您可以定义是在 2 个查询中延迟加载实体还是在 1 个查询中急切加载。定义关联后,您可以选择是eagerly 还是lazy 加载相关实体。

一般来说,这是 Entity Framework 的一个很好的起点: http://msdn.microsoft.com/en-us/library/bb386876.aspx

这是一个很好的概述实体之间的关系如何工作以及您有哪些选项: http://msdn.microsoft.com/en-us/library/ee373856.aspx

【讨论】:

  • 现在,我正在使用和学习使用实体框架。正如您所说,EF 会自动为我处理 CRUD。但是我不确定在 CRUD 与 EF 期间实体之间的关系如何运作,以及实体关系与 CRUD 的重要性或必要性。
  • 所以当项目链接时,例如1..*,查询父级也会级联查询子实体?删除、更新、添加等其他操作呢
  • 查看我上面的更改。您想了解有关删除、更新和添加的哪些信息?先看看链接。他们应该给你一个坚实的理解。此处无需重复msdn文章。
猜你喜欢
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多