(我认为这与this one的问题相同,但那里没有答案,我想我可以在这里更好地表达问题......)
我有两个Linq-to-SQL类State
和County
,其中County
的FK为State
。这是一些测试代码:
State s = State.GetState("NY"); // here I do a load of a State class via the Linq DataContext
County c = new County();
c.Name = "Rockland";
c.State = s;
MyDataContext.GetTable<County>().InsertOnSubmit(c);
MyDataContext.SubmitChanges(); // throws an exception
抛出的异常是"Violation of PRIMARY KEY constraint 'PK_State'. Cannot insert duplicate key in object 'dbo.State'"
。
换句话说,这里似乎发生的事情是,尽管我已经将s
作为现有记录加载,但当我尝试插入c
时,Linq假设所有相关对象{{{ 1}}包含,也需要插入!
这是完全荒谬的,我无法相信微软会犯这么大的错误 - 所以必须在我自己的理解错误的地方。
任何人都可以解释我做错了什么,以及这里的正确方法是什么?
谢谢!
答案 0 :(得分:0)
有些东西不对。我假设国家 - &gt;伯爵是一对多的关系。在这种情况下,正确的方法是:
State s = State.GetState("NY"); // here I do a load of a State class via the Linq DataContext
County c = new County();
c.Name = "Rockland";
s.Counties.Add(c);
db.SubmitChanges();
由于State是父表,因此您需要将县添加到州的县集合中。
答案 1 :(得分:0)
State.GetState(...)
函数是否使用与MyDataContext.GetTable<County>()
相同的datacontext?
答案 2 :(得分:0)
John Boker问道:
是State.GetState(...)函数 使用相同的datacontext MyDataContext.GetTable()?
我的回答是“是” - 他们使用相同的DataContext类......但是他们使用了不同的实例。
获得的经验:对于您计划持久保存到数据库的任何对象,始终使用与DataContext类相同的实例!
(无论如何,约翰得到了答案......)
答案 3 :(得分:0)
如果State没有使用相同的DataContext实例,则可能首先调用Attach方法。