如何用LINQ更新主从表?所有方法都用了还是不行。
-
2009年5月14日 1:41错误提示:“An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.”
1.首先我是在UI层把PurchaseOrder读取,然后做了修改。
2. 然后还是在UI层,把PurchaseOrderDetails也做了修改,这个修改有可能是ADD,EDIT,DELETE,然后再用purchaseOrder.PurchaseOrderDetails.Add(p);的方法把从表附加到主表中的。
3. 然后提交。
4. 处理数据:我已经在purchaseorderdetail表中加了一个Version的timestamp字段
private bool update(PurchaseOrder po)
{
DataContext context = new DataContext(ConnString());
context.GetTable<PurchaseOrder>().Attach(po, true);
context.SubmitChanges(); 会提示:“An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.”
如果把上面context.GetTable<PurchaseOrder>().Attach(po, true); 换成
PurchaseOrder purchaseOrder;
purchaseOrde = context.PurchaseOrder.Single(p => p.PurchaseOrderID == po.PurchaseOrderID);
context.PurchaseOrders.Attach(po, purchaseOrder);如果换成这样写的话会提示An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.
还有主键已经存在什么的,种种错误,我找了好多种方法,都不行
}
哪位专家帮帮我怎么做?其他就都好了就差这个做不好了,被老板骂死了!!!哪位帮帮忙!!!!
全部回复
-
2009年5月14日 1:54
我只用过 entity framework
似乎从原来的context 得到数据实体后 必须 detatch一次才可以在别的context 更新 否则 add 会报错
也就是说 产生数据后要detatch 以后才能传递给ui
不知道是不是这个问题
有效回复过700 撒花 -
2009年5月14日 1:56
谢谢回复!您是指在数据读取到UI的时候呢?还是提交到数据层的时候要DETACH?
-
2009年5月14日 1:58
DBML好像没有DETACH的
-
2009年5月14日 4:46我再看看 l2sql :P
有效回复过700 撒花 -
2009年5月14日 4:55
仔细地看了下你的代码 你每次都是从一个context 把这个object 取出来 再attach 进去同一个context
可是 在context 没有销毁的这段时间内 object 已经存在在这个context 的上下文中了 所以出错
您直接把attach 那一句去掉 似乎就可以不出错了
有效回复过700 撒花 -
2009年5月14日 5:02我试着在把
context.PurchaseOrders.Attach(po, purchaseOrder);这句改成:
DataContext updateContext = new DataContext();
updateContext.Attach(po, PurchseOrder);
updateContext.SubmitChanges();
这些都没有错误了,但是我去SQL看了一下,数据还是没有真正的UPDATE到数据库中。
请问我这样做是不是哪里又错了? -
2009年5月14日 5:08我现在发现,是我从UI层传入的purchaseOrder的原因,因为我刚才上面说好了是把传入的purchaseOrder用代码克隆了一个,就好了,但是如果用传入的还是会出现原来的错误。克隆出来的是无法更新新数据的,但是不会报错了。DBML真不知道如何DETACH。
-
2009年5月14日 5:42
-
2009年5月14日 5:44
还是不行啊,您可不可以根据ado.net entity framework的写法帮我写一下?我再研究一下。谢谢!