C# 如何在ADO.Net实体模型中将带有外键的表更新为另一个表?

C# 如何在ADO.Net实体模型中将带有外键的表更新为另一个表?,c#,entity-framework,ado.net,C#,Entity Framework,Ado.net,我有两个表,表1有一个主键“CustomizationId”,表2有一个与此匹配的FK CustomizationId。表2没有主键 我正在尝试从基于web的表单添加新记录。我试图将其保存到数据库,但出现错误: Customization customization = new Customization(); Code code = new Code(); customization.Name = Customizatio

我有两个表,表1有一个主键“CustomizationId”,表2有一个与此匹配的FK CustomizationId。表2没有主键

我正在尝试从基于web的表单添加新记录。我试图将其保存到数据库,但出现错误:

            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.
无法更新EntitySet“code”,因为它有一个DefiningQuery,并且元素中不存在支持当前操作的元素。
我如何处理这种情况?我只想在添加自定义项的同时添加代码。“代码”表应将Customizationid设置为自定义设置的PK/标识


有什么想法吗?

就EF而言,没有PK的表是一个视图

这意味着您有两个选择:

  • 撒一点善意的谎,让EF相信
  • (插入/更新/删除)以便您可以编辑它们
  • 通常,修改函数是存储过程,但是如果您没有访问数据库的权限,实际上可以将T-SQL直接添加到SSDL中

    例如,对于每个操作(插入、更新和删除),EDMX的
    元素中的类似内容:

    
    插入dbo.TCode(ID,Name)值(@ID,@Name)
    
    一旦您的SSDL中有了修改函数,您就需要进行修改,以便EF根据需要使用它们

    根据你的情况,我推荐(1)

    希望这有帮助

    干杯 亚历克斯

    <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>