我和EF合作差不多一年了,突然间它停止更新有关更新实体的数据库。 我怀疑它发生的原因是将EF版本更改为新版本(6.1),但是,然后我回滚了,没有什么比这更好了。
这里是代码示例,我遇到了麻烦:
using(ContextClass db = new ContextClass())
{
var order = db.Orders.FirstOrDefault(x => x.RecNo == 584667);
order.primaryStatus = "Closed";
order.secondaryStatus = "Closed";
db.Orders.Attach(order);
db.Entry(order).State = EntityState.Modified;
db.SaveChanges();
}
然后运行这段代码,从日志中我可以看到如下图片:
UPDATE [dbo].[Orders]
SET [ID] = @0, [OrderNo] = @1, [ProdLine] = @2, [ProdPos] = @3,
(and here comes every single field EXCEPT those, which I'm trying to modify!)
WHERE ([RecNo] = @20)
SELECT [RecTime], [RecStatus], [OrderStatus], [MPAStatus]
FROM [dbo].[Orders]
WHERE @@ROWCOUNT > 0 AND [RecNo] = @20
-- @0: 'Module-1' (Type = String, Size = 50)
-- @1: 'L1' (Type = String, Size = 50)
-- @2: 'Line2' (Type = String, Size = 50)
-- @3: 'Pos3' (Type = String, Size = 50)
--
-- @20: '584667' (Type = Int64)
同样的问题适用于我的项目中的每个地方,我只是想更新数据库,无论我尝试使用哪种方法。 整个实体,按财产,无所谓......
你能否就我问题的根源给我任何想法?
答案 0 :(得分:2)
OMG, 在我发布这个问题后,我发现答案非常明显。 出于某种原因,我没有注意到,因为我在模型中将StoreGeneratedPattern属性分配给"计算"。 通过这样做,我希望我只是抑制每次填充此字段的要求,只要它不允许空值并在数据库端获得默认值,但我没有排除在那种情况下,我会之后无法手动更改。 我会保留我的问题。可能它可以更快地解决一些问题。