c#中的实体之间的关系,有必要吗?

时间:2012-04-15 10:14:32

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

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

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

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

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

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

有人能简要说明CRUD如何在问题中使用这种关系吗?

1 个答案:

答案 0 :(得分:1)

实体框架及其实体及其彼此之间的关联为您提供了框架本身 - OR - Mapper - 为您处理所有更新,删除和插入的优势。它负责维护实体和实体本身之间的关系。你只需要定义模型。

您可以随时进入手动道路并自行编码。但在大多数情况下,定义实体及其属性和它们之间的关系,并使用Entity Framework或任何其他OR-Mapper(如nHibernater)来处理所有这些,在开发速度,可维护性和一致性方面是一个巨大的优势。 p>

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

示例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个查询中的 eager load 。定义关联后,您可以选择是否加载相关实体急切懒惰

这是实体框架的一个很好的起点: http://msdn.microsoft.com/en-us/library/bb386876.aspx

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