督察童鞋好,谢谢你上次关于动态生成linq查询的回答。
喜欢linq to sql的理由是因为其简单暴力,
用linq做了几个小项目,一般都是简单的update和insert操作使用linq,
但关键操作还是存储过程(处理),和select模型库(查询),linq并没有深入研究。
突然想到关于linq还有一个问题忘了提问,活动已关闭,只好这里问了。问题如下:
1.当DataContext.SubmitChanges()的时候,是否附加一些SQL语句(比如常规的update,insert等DML),
能和提交的linq数据表对象,拥有共同的事务。2.设计器上归于不同的DataContext的表,能否有办法转换成同一个DataContext进行操作和SubmitChanges().
喜欢linq to sql的理由是因为其简单暴力,
用linq做了几个小项目,一般都是简单的update和insert操作使用linq,
但关键操作还是存储过程(处理),和select模型库(查询),linq并没有深入研究。
突然想到关于linq还有一个问题忘了提问,活动已关闭,只好这里问了。问题如下:
1.当DataContext.SubmitChanges()的时候,是否附加一些SQL语句(比如常规的update,insert等DML),
能和提交的linq数据表对象,拥有共同的事务。2.设计器上归于不同的DataContext的表,能否有办法转换成同一个DataContext进行操作和SubmitChanges().
触发器是一个不错的选择,但是我们在C#程序,对表与表之间的联动关系,做了规则引擎,
对引擎进行增补可能动态产生SQL,我们一般把规则都写在与数据库无关的地方,
数据库只是简单的存储,和必要的批操作。
所以如果DataContext能够灌入SQL,共享事务,对我们来说是最好的选择了。
麻烦版主帮忙转移一下。
1. 你可以在SubmitChanges后,在TransactionScope.Complete之前,做这些DML操作啊,比如:
using (TransactionScope scope = new TransactionScope())
{
//make some changes to the data
db.SubmitChanges();
//make the other changes to the data
db.SubmitChanges();
scope.Complete();
}2.这个目前LINQ还不支持,不过有其他变通的方法,比如在db1中通过View,store prcedure来操作db2,然后在db1中映射这些到Datacontxt里边,在代码里就可以通过一个datacontxt来操作两个数据库了
1. 你可以在SubmitChanges后,在TransactionScope.Complete之前,做这些DML操作啊,比如:
using (TransactionScope scope = new TransactionScope())
{
//make some changes to the data
db.SubmitChanges();
//make the other changes to the data
db.SubmitChanges();
scope.Complete();
}2.这个目前LINQ还不支持,不过有其他变通的方法,比如在db1中通过View,store prcedure来操作db2,然后在db1中映射这些到Datacontxt里边,在代码里就可以通过一个datacontxt来操作两个数据库了TransactionScope需要开启几个服务,而有些小项目,我们是在客户端执行Linq to Sql,
所以客户端不一定会开启那样的服务。
有没有办法通过调用DataContext的事务,然后进行操作。
但是相关流程操作要用sql去实现,和linq要共享一个transaction,比较困难···
如果在客户端本地启动transaction,不构建WCF之类引擎,winform程序执行TransactionScope还是会出错,
提示要开启分布式服务。
但是相关流程操作要用sql去实现,和linq要共享一个transaction,比较困难···
如果在客户端本地启动transaction,不构建WCF之类引擎,winform程序执行TransactionScope还是会出错,
提示要开启分布式服务。
我现在尝试使用DataContext的Transaction属性(DbTransaction)
2.using (TransactionScope scope = new TransactionScope())
{
db1操作
其他操作(比如发邮件)
db2操作
scope.Complete(); (仅当3个操作全部成功才会提交)
}
但是必须开启msdtc分布式事务服务。
BPM定义数据是使用xml类型数据存储文件,并不是关系数据库,当然也可以使用nosql,另外感觉即使合适关系数据库也无大不妥。
但BPM的生产数据还是在放关系型数据库的。
生产数据是需要考虑事务的。
再说到你觉得略鄙视的“纠结、争论、辛苦20倍”,团队有过这样的日子,但回想起来也乐在其中,子非鱼~
dc.Connection.Open();
DbTransaction tran = dc.Connection.BeginTransaction();
dc.Transaction = tran;