我试图执行以下操作:
SqlConnection cnSql = new SqlConnection(cnstring);
cnSql.Open();
SqlTransaction Transactie = default(SqlTransaction);
Transactie = cnSql.BeginTransaction();
SqlCommand cmddelbonh = new SqlCommand();
cmddelbonh.Connection = Transactie.Connection;
cmddelbonh.Transaction = Transactie;
cmddelbonh.CommandText = "update artikelgroepen set OMSN='XXXXX' where ID = 3";
cmddelbonh.ExecuteNonQuery();
using (CXNACC_TESTFIRMA cxn = new CXNACC_TESTFIRMA(cnSql))
{
cxn.Database.UseTransaction(Transactie);
var myList = cxn.ARTIKELS.Take(100).ToList();
cxn.ARTIKELS.First().OMSN = "XXXXX";
cxn.SaveChanges();
}
Transactie.Commit();
这一行 cxn.Database.UseTransaction(Transactie); 进入Context上的OnModelCreating并抛出一个UnintentionalCodeFirstException
当注释掉抛出新的UnintentionalCodeFirstException时 它有效,但我不想评论出一个不应该被触发的错误。
我用Google搜索,但没有找到关于如何在数据库第一个上下文中使用EF6的UseTransaction功能的答案。
在您提出之前:app.config中存在Entity的connectionString。
对此有何想法?
由于
答案 0 :(得分:1)
我发现这个article更多地解释了数据库优先与代码优先......
似乎使用构造函数将连接作为参数(您的行:using (CXNACC_TESTFIRMA cxn = new CXNACC_TESTFIRMA(cnSql))
)将使用代码优先策略来构建上下文
但后来我被告知以下内容:
要让EF使用您的EDMX文件中的元数据,您需要传入 EntityConnection而不是直接的SqlConnection。
如果您希望SqlConnection能够用于其他任务 在上下文之外,您始终可以创建EntityConnection 然后从中取出StoreConnection:
var entityConnection = new EntityConnection("name=AdventureWorksEntities");
var dbConnection = entityConnection.StoreConnection;
因为EntityConnection派生自DbConnection,您仍然可以传递 它在您尝试使用的DbContext上的相同构造函数中。