LINQ to SQL多个DBML文件

时间:2009-11-25 19:01:56

标签: c# winforms linq-to-sql

这是场景...... 我在LINQ中有两个单独的上下文,实际的数据库是一个,而上下文基本上打破了关注点,在这种情况下,我使用了3个表。

表1(AccountId)(背景1)

表2(PersonId)(背景2)

表3(AccountId,PersonId)(背景2)

所以这里发生的是(上下文2)只能在表1中创建记录后在表3中创建记录。

考虑到这一点,我创建一个ActionScheduler,即采取所有3 LINQ到SQL对象,并于重要(帐户,PERSONID)的属性创建观察者,而当它们两者都不是默认值(0),表示已插入它们,然后将第3个(表3)对象绑定到AccountId,并将其添加到表2的表3对象列表中。

所以我技术上必须做的是基本上调用SubmitChanges 2次,事情会很好。

那就是事情崩溃的时候。我做第一次调用,表1,插入触发ActionScheduler上的事件,然后更新表3对象,然后表2插入触发表3对象,现在满足要求(PersonId,AccountId都有效),表表2对象中添加了3个对象。 第二个保存被调用,并且这里没有任何更改,因此根本没有添加任何内容,现在如果在打开相同的上下文时添加另一组对象,并再次保存,则不会添加新的表3对象(相同的行为),但另一个确实具有完美的价值观,所以看起来这些家伙总是落后一步。

任何sugestions?有没有更好的方法来实现这一点,SubmitChanges生命周期有多么可取?

对不起所有的问题,但这真的让我烦恼。非常感谢。

1 个答案:

答案 0 :(得分:0)

您真的不应该将单个数据库分解为单独的上下文。如果您合并到一个上下文,则可以执行以下操作:

YourDataContext db = new YourDataContext();

Table1 account = new Table1();
db.Table1s.InsertOnSubmit(account);

Table2 person = new Table2();
db.Table2s.InsertOnSubmit(person);

Table3 link = new Table3();
link.Account = account;
link.Person = person;
db.Table3s.InsertOnSubmit(link);

db.SubmitChanges();

这将在一次调用中提交所有三个并且(假设ID属性是标识列)更新对象上的ID。