c# – 如何在ADO.Net实体模型中将具有外键的表更新到另一个表?

前端之家收集整理的这篇文章主要介绍了c# – 如何在ADO.Net实体模型中将具有外键的表更新到另一个表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个表,Table1有一个主键’CustomizationId’,而Table2有一个与之匹配的FK Customizationid.表2没有主键.

我正在尝试从基于Web的表单添加新记录.我试图将其保存到数据库,我收到一个错误

  1. Customization customization = new Customization();
  2. Code code = new Code();
  3. customization.Name = CustomizationName.Text;
  4. customization.LastUpdated = DateTime.Now;
  5.  
  6. code.Top = top_js.InnerText;
  7. code.Bottom = bottom_js.InnerText;
  8.  
  9. //code.CustomizationId = customization.CustomizationId;
  10.  
  11. customization.Code = code;
  12. entities.AddToCustomizations(customization);
  13. entities.SaveChanges();

当我调用SaveChanges时,无论是否添加注释行,我都会收到错误.

  1. Unable to update the EntitySet 'Code' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

我该如何处理这种情况?我只想在我添加自定义的同时添加代码. “代码”表应将Customizationid设置为Customization设置的PK / Identity.

有任何想法吗?

解决方法

就EF而言,没有PK的表是View.

这意味着您有两种选择:

>讲一点白色谎言,并说服EF说‘view’ is a table
> Add modification functions(插入/更新/删除),以便您可以编辑它们.

通常修改函数是存储过程,但如果您无权访问数据库,则可以直接将T-sql添加到SSDL中…

即< StorageModel>中的类似内容每个动作(插入,更新和删除)的EDMX元素:

  1. <Function Name="InsertCode" BuiltIn="false" IsComposable="false" >
  2. <CommandText>
  3. INSERT dbo.TCode(ID,Name) VALUES (@ID,@Name)
  4. </CommandText>
  5. <Parameter Name="ID" Type="int" Mode="In" />
  6. <Parameter Name="ID" Type="nvarchar(max)" Mode="In" />
  7. </Function>

在SSDL中具有修改功能后,需要map them,以便EF根据需要使用它们.

在你的情况下,我建议(1).

希望这可以帮助.

干杯亚历克斯

猜你在找的C#相关文章