我有 2 个表,Table1 有一个主键“CustomizationId”,Table2 有一个与此匹配的 FK Customizationid。 Table2 没有主键。
我正在尝试从基于网络的表单添加新记录。我尝试将其保存到数据库中,但收到错误:
Customization customization = new Customization();
Code code = new Code();
customization.Name = CustomizationName.Text;
customization.LastUpdated = DateTime.Now;
code.Top = top_js.InnerText;
code.Bottom = bottom_js.InnerText;
//code.CustomizationId = customization.CustomizationId;
customization.Code = code;
entities.AddToCustomizations(customization);
entities.SaveChanges();
当我调用 SaveChanges 时,无论我是否在注释行中添加,都会收到错误。
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 的表是一个视图。
这意味着您有两个选择:
- 撒个善意的谎言,让 EF 相信“视图”是一个表
-
添加修改功能(插入/更新/删除)以便您可以编辑它们。
通常修改函数是存储过程,但如果您无权访问数据库,实际上可以将 T-SQL 直接添加到 SSDL...
IE。像这样的东西<StorageModel>
每个操作(插入、更新和删除)的 EDMX 元素:
<Function Name="InsertCode" BuiltIn="false" IsComposable="false" >
<CommandText>
INSERT dbo.TCode(ID, Name) VALUES (@ID, @Name)
</CommandText>
<Parameter Name="ID" Type="int" Mode="In" />
<Parameter Name="ID" Type="nvarchar(max)" Mode="In" />
</Function>
一旦你的 SSDL 中有修改函数,你需要map them以便 EF 根据需要使用它们。
根据您的情况,我建议(1)。
希望这可以帮助。
干杯
亚历克斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)