实体框架4错误:无法更新EntitySet,因为它具有DefiningQuery

Tyl*_*ler 15 .net entity-framework entity-framework-4

好的,这是场景.我有3张桌子.一个名为aspnet_Users的名为Categories,一个名为User_Categories的链接表.aspnet_Users和Categories都有主键(分别是UserId和ID).链接表只有两列:CategoryID和UserId,并且每列都有外键关系设置,并且我对User_Categories上的两列有唯一的键设置.这将在aspnet_Users表和Categories表之间建立多对多关系.我从这个数据库设置生成了我的实体edmx文件,一切看起来都很完美,几乎适用于所有操作.

我想要做的是从表单中添加一个新类别(它自己完美地工作),同时还将特定用户与新提交的类别相关联.当我尝试这样做时,我在主题行中得到错误.这是我用来尝试这个的代码(ctx是我的实体上下文对象):

public ActionResult Create(Category category, Guid userId)
{
    aspnet_Users user = ctx.aspnet_Users.SingleOrDefault(x => x.UserId == userId);
    ctx.Categories.AddObject(category);
    user.Categories.Add(category);
    ctx.SaveChanges();;
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

Dre*_*kes 39

我假设完整的异常消息类似于:

无法更新EntitySet YourTableName,因为它具有DefiningQuery,并且ModificationFunctionMapping元素中不存在任何InsertFunction元素以支持当前操作.

如果您的数据库表没有定义主键,则会发生这种情况.

向表中添加主键(使用SQL Server Management Studio或其他),并.edmx从数据库更新模型.