Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework c#中实体之间的关系,必要吗?_Entity Framework_Oop_Entity Relationship_Object Oriented Database - Fatal编程技术网

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

Entity framework c#中实体之间的关系,必要吗?,entity-framework,oop,entity-relationship,object-oriented-database,Entity Framework,Oop,Entity Relationship,Object Oriented Database,关于主题,一些实体具有多重性关系 我在学习中了解了所有这些,但是,是否有必要在c#编程中维护,例如在本例中使用实体框架 这是因为我对实体的更新是如何工作的感到困惑,比如级联以及为什么它很重要 我发现只编写彼此独立的实体代码更容易,尽管它们在现实生活中实际上是相关的,比如类别产品 任何人都可以在问题中简要说明CRUD是如何处理这种关系的吗?实体框架及其实体及其彼此之间的关联为您提供了一个优势,即框架本身-或-映射器-为您处理所有更新、删除和插入。它负责维护实体和实体本身之间的关系。您“只”需要定

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

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

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

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


任何人都可以在问题中简要说明CRUD是如何处理这种关系的吗?

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

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

如果将实体定义为彼此独立的实体(使用其他词语,则不能处理它们之间的关联),则无法从一个对象导航到另一个对象。请参见示例:

示例a)定义了关联:

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

var myOrder = Repository.FindOrderById(15);
var orderItems = myorder.OrderItems;
示例b)未定义关联:

2个实体:订单和订单项 如果未定义关联,则无法从一个实体导航到另一个实体。您需要单独查询所有订单项,例如

var myOrder = Respository.FindOrderById(15);
var orderItems = Repository.FindOrderItemsByOrder(15);
这并不是说实体是如何加载的。在示例b中,为了查询订单和相关的订单项,OR映射器对数据库执行2次查询。在示例a中,您可以定义是在2个查询中延迟加载实体,还是在1个查询中快速加载实体。定义了关联后,您可以选择是急切地加载相关实体还是延迟加载相关实体

这通常是实体框架的良好起点:

这是一个很好的概述,说明了实体之间的关系是如何工作的,以及您有哪些选项:

现在,我正在使用并学习使用实体框架。正如你所说,EF自动为我处理积垢。但是,我不确定实体之间的关系在CRUD与EF之间如何工作,以及实体关系与CRUD之间的重要性或必要性。因此,当项目链接时,例如1..*,查询父实体也将级联查询子实体?其他操作,如删除、更新和添加,请参见上面的“我的更改”。关于删除、更新和添加,您想了解什么?先看一下链接。他们应该给你一个坚实的理解。这里没有必要重复msdn文章。指向一篇文章是好的(但我们试图从中猜测是浪费时间)但最好给我们一个小例子,最好能说明您需要解释的内容。我想知道CRUD操作如何与实体框架或面向对象编程一起工作,因为我的数据库或类设计实践通常与任何其他实体都没有任何关系。例如,Invoice和InvoiceItem类虽然作为父级和子级关联,但我从未让它们在数据库中通过图表链接在一起,也从未在代码级别将它们链接在一起。因此,我必须编写两条delete语句来删除这两项。根据我的理解,正如derSteve在下面提到的,通过这种关系,删除发票也将通过pk/fk删除InvoiceItem。您确实可以定义一个关联,将删除级联到孤立实体。请参见msdn页面上该主题的最后一段