【发布时间】:2016-08-16 06:49:58
【问题描述】:
var row = DataContext.TableA.FirstOrDefault(x => x.Col1 == "foo" && x.Col2 == "bar");
row.Col3 = "xyz";
DataContext.SaveChanges()
我预计 Col3="xyz" 只会为 Col1="foo" and Col2="bar" 更新。但它更新了我预期的更多行。当我记录查询时,EF 生成的查询似乎完全缺少 Col2。知道为什么吗?
UPDATE [dbo].[TableA]
SET [Col3] = @0
WHERE ([Col1] = @1)
-- @0: 'xyz' (Type = String)
-- @1: 'foo' (Type = String)
【问题讨论】:
-
TableA中的PK是什么? -
它是
Col1和Col2的组合。 -
您是否使用代码优先?你确定你映射的实体正确吗?
-
是的,代码优先。这是映射。
HasKey(x => x.Col1); Property(x => x.Col1).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); HasKey(x => x.Col2); Property(x => x.Col2).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); ToTable("dbo.TableA"); -
您的映射不正确。应该是
HasKey(m => new { m.Col1, m.Col2 });
标签: c# .net entity-framework entity-framework-6