关于主题,一些实体具有多重关系
我在学习中学到了所有这些,但是,是否有必要在 c# 编程中进行维护,例如在本示例中使用实体框架?:
这是因为我对实体更新的工作原理感到困惑,例如级联以及为什么它很重要。
我发现将实体彼此独立编码更容易,尽管它们在现实生活中实际上是相关的,例如类别产品。
谁能在问题中简要说明 CRUD 如何处理这种关系?
关于主题,一些实体具有多重关系
我在学习中学到了所有这些,但是,是否有必要在 c# 编程中进行维护,例如在本示例中使用实体框架?:
这是因为我对实体更新的工作原理感到困惑,例如级联以及为什么它很重要。
我发现将实体彼此独立编码更容易,尽管它们在现实生活中实际上是相关的,例如类别产品。
谁能在问题中简要说明 CRUD 如何处理这种关系?
实体框架及其实体及其相互之间的关联为您提供了框架本身 - 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。
一般来说,这是实体框架的一个很好的起点:http: //msdn.microsoft.com/en-us/library/bb386876.aspx
这是一个很好的概述实体之间的关系如何工作以及您有哪些选项:http: //msdn.microsoft.com/en-us/library/ee373856.aspx