我有一个Code First EF模型设置,我正在尝试使用实体和ID值添加记录。这里没有显示,但“上面”这段代码是我设置并添加到上下文中的其他实体(例如,uCarParents,uAlice等)
然后我点击了这段代码。请注意,我调用context.SaveChanges()的唯一时间是此块结尾处的那个。
var uba = new List<UserBooleanAttribute>
{
new UserBooleanAttribute {UserAttribute= uCarParents, User = uAlice},
new UserBooleanAttribute {UserAttribute = uCarTeens, User = uBob},
new UserBooleanAttribute {UserAttributeID = 3, UserID = 1},
new UserBooleanAttribute {UserAttributeID = 4, UserID = 2}
};
uba.ForEach(ua => context.UserBooleanAttributes.Add(ua));
context.SaveChanges();
SaveChanges有效,我的断言通过。然后有人向我指出UserBooleanAttribute的名称应该是 ProjectBooleanAttribute 。所以我改变了,然后我在SaveChanges上得到了一个FK异常。
有点困惑,我在这个块上面放了一个SaveChanges(),然后它再次开始工作。我怀疑问题是使用ID以某种方式添加了新的UserBooleanAttributes。实际上,如果我通过传递UserAttribute和User而不是ID来替换这两行,它就开始工作而没有额外的SaveChanges。
但是这让我想知道为什么它首先起作用。
所以我开始通过重命名BooleanAttribute XXXBooleanAttribute 来进行更多测试。 VVVBooleanAttribute 也是如此,但 UUUBooleanAttribute 不起作用。
至少可以说这种行为很奇怪。我只是在猜测,但看起来EF(以及SQL Server)可能会根据类的命名方式按特定顺序更新表。