当前位置:编程学习 > C#/ASP.NET >>

MVC4.0--EntityFramework5.0同一Action关联更新问题

--------------------编程问答-------------------- 怎么会这样,T1中增加T2,实际操作是增加T2指定其外键为T1,你用T2做模型创建控制器和View就行了:

public ActionResult Create(T2 t2){
//...模型验证
context.T2s.Add(t2);
context.SaveChanges();
//...页面跳转
}
--------------------编程问答-------------------- 但是这样的话,做不到同时修改 T1和T2的效果
在.edmx里面看T2是T1的导航属性

还有,就是不是add,是修改,同时修改T1和T2
例如:T1有 cityID  city 
     T2有 name address cityID

View中修改cityID=1的记录:
修改T1.city的名字和T2.address的地址,并且删除了一条该cityID
的T2的记录,又增加了一条该cityID的T2记录(name不同),那么在 

[HttpPost]
public ActionResult Edit(T1 tt1)

该如何更新两个表? --------------------编程问答-------------------- 这就要分成四步操作了:删除一条T2记录、增加一条T2记录和修改两T1、T2记录。你要弄清你的View和Controller交换的模型是什么?

比较好的方式就是删除、增加这两条都通过Ajax的方式调用,减少页面回发,目标是User的Delete和Create。

City里的Users对应的不是在City表里的东西,而是通过User表的外键反向查出来的。所以凡是修改User的都对User模型去操作,不用管City如何。 --------------------编程问答-------------------- 当然你也可以一步操作到位,这样首先在客户端浏览器要维护模型数据,回发的时候自己解析哪个改了,哪个增加了,哪个删除了,比较复杂。 --------------------编程问答-------------------- 谢谢Mackz的回复

或者有没有具体一点的代码反映一下思路的?
我觉得EF既然可以绑定主从来新增,那么我弄好View和Controller交换的模型,用户只可以在我这个限定模型基础上做增删改,而且两个表都有主键,又可以调出原来未修改的模型,EF还是不能知道两个之间的差别在哪里帮助开发者做更新么? --------------------编程问答--------------------  [HttpPost]
        public ActionResult Edit(T1 tt1, int Id)
        {
var t1 = db.T1.Find(id);
t1.属性1 = tt1.属性1;
...
}
一个一个重新赋值,我想这个应该都会;

主要的问题在于:
t1.T2s = tt1.T2s;
直接赋值肯定是不行的。这里要分情况:

如果t2中的uid不允许为空,并且表关系允许级联删除,那么可以简单这么做下:
t1.T2s.Clear();//把t1对应的t2都删掉
t1.T2s = tt1.T2s;//这样就没问题了

如果t2中的uid允许为空,那么按照上面的方法ef只是删除关系,不会自动删t2的数据,需要手工把这些数据删掉,
db.T2.Remove(.....);

之后db.SaveChanges()就行了;

当然如果你觉得:t1对应的t2s可能只是某一项发生了变动,全部删掉太可惜了,只想改变修改了的部分,当然可以。不过需要把tt1.T2s和数据库中的t1.T2s一个个的做比较。具体怎么弄,楼主加油吧。 --------------------编程问答-------------------- 找到个方法,需要根据t1.Id建立EntityKey对象
  但我用EF5.0,继承自DbContext,DbContext没有GetObjectByKey() 。。。。。。。。。!!! 
不能用 context.GetObjectByKey()    我该怎么办啊???  --------------------编程问答--------------------
引用 7 楼 ccdlg 的回复:
找到个方法,需要根据t1.Id建立EntityKey对象
  但我用EF5.0,继承自DbContext,DbContext没有GetObjectByKey() 。。。。。。。。。!!! 
不能用 context.GetObjectByKey()    我该怎么办啊???



搞错,是t2.ID
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,