【问题标题】:EF missing where clause in updateEF 在更新中缺少 where 子句
【发布时间】: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是什么?
  • 它是Col1Col2 的组合。
  • 您是否使用代码优先?你确定你映射的实体正确吗?
  • 是的,代码优先。这是映射。 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


【解决方案1】:

当使用Fluent API来指定复合主键你必须使用new关键字来创建匿名类型。

HasKey(m => new { m.Col1, m.Col2 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多