Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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
C# 实体框架:使用FK值保存记录,而不查找关系_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 实体框架:使用FK值保存记录,而不查找关系

C# 实体框架:使用FK值保存记录,而不查找关系,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一个“ExpenseType”表,其中包含一个“ExpenseType”表的FK值。现在,如果我想保存一个新的费用,我首先获取FK的int值,查找ExpenseType表,然后将对象分配给费用对象。例如: //create new expense var e = new Expense(); //lookup the associated expense type var et = context.ExpenseTypeSet.First(e -> e.expenseTypeID =

我有一个“ExpenseType”表,其中包含一个“ExpenseType”表的FK值。现在,如果我想保存一个新的费用,我首先获取FK的int值,查找ExpenseType表,然后将对象分配给费用对象。例如:

//create new expense
var e = new Expense();

//lookup the associated expense type
var et = context.ExpenseTypeSet.First(e -> e.expenseTypeID == 10);

//set field values
e.expenseName = "Some name";
e.expenseType = et;

//save
context.Save();
是否有一种方法可以创建/插入记录,而不必首先强制对FK表进行查找?不需要查找,并强制额外的数据库命中。我已经知道FK身份证了。。。那么,有没有一种方法可以设置ID并让它快乐呢


提前感谢-

您也可以使用EntityReference执行此操作:

e.expenseTypeReference.EntityKey 
   = new EntityKey("MyContainer.expenseTypeSet", "expenseTypeID", 10);
我有一份报告涵盖了这一问题和相关问题:


您可能需要特别关注的是这篇文章,它讨论了为FKs创建假属性。除非您愿意,否则您不需要走那么远,但这些原则是有用的。

这不是违背了实体框架的概念吗?我以前也遇到过这种情况,但通过直接设置某个对象的ID,会破坏数据库值的对象表示形式。这就像是两者的混合。我想没有法律禁止它,但似乎这个想法已经失去了。更像是一个愚蠢的哲学问题。哦,伙计,这是自花生酱以来最好的东西!好的,那个么问题-MyContainer指的是什么?@Programming Tool-我遇到过两种方式都喜欢的人。有些人,像你一样,认为这违反了各种规则;其他人认为,仅仅为了插入而必须对每个FK进行db查找是一种罪恶。在我的例子中,如果我提供一个不存在的ID,db将不允许它,因为它内置了约束。通过调用ctx.DefaultContainerName,您可以获得真正的“MyContainer”。在有优势的地方,应该应用OO原则。但在处理关系系统时,一些OO原则将变得非常愚蠢。。。让DB select只设置FK值是一个典型的应用低能OO原则的例子,它没有实际意义或提供任何实际优势。关系世界和对象世界之间总是存在阻抗不匹配。在边界附近,你必须开始违反原则才能找到一个中间地带。整个实体的关键是一个工具,可以让你恢复对此类问题案例的常识。