我有一个包含'transactions'和'transaction_lines'的数据库。事务具有基本共享详细信息,事务行包含组成事务的组件的值。在传统的SQL中,我使用SQL事务(对不起,我们现在有一个含糊不清的词......)然后我会INSERT INTO事务...从事务表中的新行获取IDENTITY键值,然后插入到我的transaction_line表中,使用Transaction表中的标识列作为外键。
使用linq有一个很好的方法吗?
这是我到目前为止所拥有的:
account_transaction ac = new account_transaction
{
transaction_date = DateTime.Now,
is_credit = isCredit,
account = (db.accounts.FirstOrDefault(a => a.account_id == accountid))
};
db.AddToaccount_transaction(ac);
db.SaveChanges();
我认为在'AddToaccount_transaction(ac)'和'db.SaveChanges()'之间,我需要添加我的transaction_lines。
答案 0 :(得分:1)
您应该能够创建新的transaction_line
个对象并将外部实体设置为ac
。在LINQ-to-SQL中,您使用实体对象而不是显式键。通过将实体对象设置为ac
对象,您将指示图层确定密钥是什么并为您设置。
答案 1 :(得分:1)
上面的答案是正确的,但我会将它全部包装在TransactionScope中。这样,如果该查询的任何部分失败,它将回滚事务。只需记住在关闭连接之前调用scope.Complete()方法。 http://msdn.microsoft.com/en-us/library/ms251686(VS.80).aspx