相关疑难解决方法(0)

由于一个或多个外键属性不可为空,因此无法更改关系

当我在一个实体上使用GetById()然后将子实体的集合设置为来自MVC视图的新列表时,我收到此错误.

操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.

我不太明白这一行:

由于一个或多个外键属性不可为空,因此无法更改关系.

为什么要更改2个实体之间的关系?它应该在整个应用程序的整个生命周期内保持不变.

发生异常的代码很简单,即将集合中已修改的子类分配给现有父类.这有望满足删除子类,添加新类和修改的需要.我原以为Entity Framework会处理这个问题.

代码行可以提炼为:

var thisParent = _repo.GetById(1);
thisParent.ChildItems = modifiedParent.ChildItems();
_repo.Save();
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-4.1

179
推荐指数
7
解决办法
15万
查看次数

TryUpdateModel,ASP .NET MVC 3的真实示例

我无法理解,如何使用TryUpdateModel并同时保存MVC架构.

如果我没有弄错的话,使用datacontexts必须在模型中.所以,这样的代码

var db=new TestEverybody();//it is class, which was generated by EntityFramework 
var currentTesting=db.Testing.(t => t.id == id).First();
Run Code Online (Sandbox Code Playgroud)

必须位于模型中,而不是控制器中,不是吗?

但TryUpdateModel用法的示例如下:

    public ActionResult Edit(Testing obj)//Testing collection
    {
        var db = new TestEverybody();
        var currentTesting=db.Testing.(t => t.id == obj.id).First();
        TryUpdateModel(currentTesting);
        db.SaveChanges();            
        return RedirectToAction("Index");
    }
Run Code Online (Sandbox Code Playgroud)

这种方式不会打破MVC架构吗?我们在控制器中使用数据库,而不是在特殊的Model类中.

那么,在真实项目中使用TryUpdateModel的最佳方法是什么?

asp.net-mvc controller model

29
推荐指数
2
解决办法
4万
查看次数