Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net 如何使用编辑表单中的SelectList更新实体引用?_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net 如何使用编辑表单中的SelectList更新实体引用?

Asp.net 如何使用编辑表单中的SelectList更新实体引用?,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,这是中讨论的后续行动。我不知道如何在2个月大的帖子中提出后续问题;所以,如果有更好的办法,我向你道歉 无论如何,重申一下,我有一个ASP.NETMVC编辑表单,其中一个字段是选择列表。我可以很好地获得这些值,但是在发布后更新主实体时遇到了麻烦。显然,我有查找实体的密钥,但必须加载所有查找似乎很疯狂。因此,建议的解决方案是实体参考 为了清楚起见,假设我有一个客户作为主要实体,而title(Mr/Mrs/Dr等)作为查找 因此,上面的链接建议如下: customer.TitleReference.E

这是中讨论的后续行动。我不知道如何在2个月大的帖子中提出后续问题;所以,如果有更好的办法,我向你道歉

无论如何,重申一下,我有一个ASP.NETMVC编辑表单,其中一个字段是选择列表。我可以很好地获得这些值,但是在发布后更新主实体时遇到了麻烦。显然,我有查找实体的密钥,但必须加载所有查找似乎很疯狂。因此,建议的解决方案是实体参考

为了清楚起见,假设我有一个客户作为主要实体,而title(Mr/Mrs/Dr等)作为查找

因此,上面的链接建议如下:

customer.TitleReference.EntityKey = new EntityKey("MyEntities.Titles", "Id", 
    Int32.Parse(formData["personTitle"]);
var originalCustomer = (from c in MyEntities.Customers
    where c.Id = customer.Id select c).first();
MyEntities.ApplyPropertyChanges(originalCustomer.EntityKey.EntitySetName, 
    customer); 
到目前为止,一切顺利。我分配了实体键(我在调试器中看到这确实是我所期望的)。但我不知道如何将新值与其他客户字段一起保存。我正在做以下工作:

customer.TitleReference.EntityKey = new EntityKey("MyEntities.Titles", "Id", 
    Int32.Parse(formData["personTitle"]);
var originalCustomer = (from c in MyEntities.Customers
    where c.Id = customer.Id select c).first();
MyEntities.ApplyPropertyChanges(originalCustomer.EntityKey.EntitySetName, 
    customer); 
这将更新除查找之外的所有客户字段。直观地说,这(有些)是可以理解的,因为如果我指定originalCustomer.EntityKey.EntitySetName,ApplyPropertyChanges会忽略originalCustomer.TitlerReference.EntityKey.EntitySetName

但是如果我指定originalCustomer.TitleReference.EntityKey.EntitySetName,运行时会抱怨该实体为null(这也是可以理解的,因为我没有为该实体分配任何内容;仅为实体引用)

很可能很明显,我会绕着似乎很简单的情况转一圈。但是,我找不到任何教程来涵盖它(这本身就很奇怪)

此外,我还有一个更复杂的问题…客户可能有多个地址,地址有状态…希望,一旦我弄清楚标题-我可以推断

顺便说一句,示例(客户-头衔-地址)是虚构的;但它很好地模拟了问题。

这应该可以:

var originalCustomer = (from c in MyEntities.Customers
    where c.Id = customer.Id select c).First();

originalCustomer.TitleReference.EntityKey = new EntityKey("MyEntities.Titles", "Id", 
    Int32.Parse(formData["personTitle"]);

context.SaveChanges()
这应该起作用:

var originalCustomer = (from c in MyEntities.Customers
    where c.Id = customer.Id select c).First();

originalCustomer.TitleReference.EntityKey = new EntityKey("MyEntities.Titles", "Id", 
    Int32.Parse(formData["personTitle"]);

context.SaveChanges()

我收到一个错误:*元数据集合中不存在标识为“MyEntities”的成员。参数名称:EntityKey分配中的identity**……不幸的是,我觉得我正处于收益递减点(也称为浪费时间).我在好几个地方读到EF4会更好;因此我可能会加载查找对象(它已经工作了),并等待spring做出更好的选择solution@Felix:您必须在EntityContainerName.EntitySetName(例如ShopEntities.TitleSet)中提供名称.你提供了正确的名字吗?我很确定我提供了…事实上,为了避免打字错误,我(在空白处)打字MyEntities,然后让Intellisense为我填充标题,然后只在引号内剪切“n”粘贴。当然,这会留下我键入错误名称的可能性,但它肯定是现有名称。所以-太棒了!是
MyEntities=new MyEntities()
MyEntities=new SomethingElseEntities()
?如果是第二个,你应该写
一些东西。TitleSet
。就是这样!现在,我一半的大脑在想“我很愚蠢”;另一半在想"我想我在搜索手册和谷歌时都找不到任何东西。我是在做一些非常不寻常的事情,还是错过了一些明显的事情?!我得到了一个错误:*标识为“MyEntities”的成员在元数据集合中不存在。参数名称:EntityKey分配中的identity**不幸的是,我觉得我正处于收益递减的阶段(也就是浪费时间)。我在几个地方读到EF4将会更好;因此我可能会加载查找对象(已经工作),并等待spring提供更好的结果solution@Felix:您必须在EntityContainerName.EntitySetName(例如ShopEntities.TitleSet)中提供名称.你提供了正确的名字吗?我很确定我提供了…事实上,为了避免打字错误,我(在空白处)打字MyEntities,然后让Intellisense为我填充标题,然后只在引号内剪切“n”粘贴。当然,这会留下我键入错误名称的可能性,但它肯定是现有名称。所以-太棒了!是
MyEntities=new MyEntities()
MyEntities=new SomethingElseEntities()
?如果是第二个,你应该写
一些东西。TitleSet
。就是这样!现在,我一半的大脑在想“我很愚蠢”;另一半的大脑在想“我想我在搜索手册和谷歌找这个,但什么都找不到。我是在做一些非常不寻常的事情,还是错过了一些明显的事情?!