繁体   English   中英

在单个事务内一起建立实体框架实体添加和ADO.Net存储过程INSERTS

[英]Establishing Entity Framework Entity addition & ADO.Net stored procedure INSERTS together inside a single Transaction

我有一个使用实体框架或处理数据库表中数据的应用程序。 有一个主表CUSTOMER ,它通过外键链接到其他3个表。 链接的表是

RENTAL
PAYMENTS
VEHICLES

我可以使用EF在所有这4个表上添加/编辑/删除实体。

我想将当前方案(使用EF来处理所有数据库事务)更改为类似的情况。

创建新实体并尝试将实体(5个新实体/记录)保存回数据库后,我想使用存储过程将新实体添加到VEHICLES模型中,并使用EF将实体保存到所有其他实体中模型-并在一次交易中就将所有这些降低了。

另外,我必须等到EF调用完成,因为我需要将作为EF保存的一部分创建的新CUSTOMER_ID作为输入参数传递给存储过程,以保存VEHICLES实体。

我不想从事务外部调用存储过程,因此,如果存储过程调用失败,则通过EF对数据库所做的更改也会回滚。

任何人都知道如何实现这一目标吗?

PS:不查找任何代码示例; 高水平的插图会有所帮助。

我正在使用Entity Framework 5,.Net v4.5,VS 2013,Oracle 11g,ODP.Net

将存储的过程映射到实体1)创建存储的过程2)更新数据模型以包括存储的过程-通过EF 6.x的“从数据库更新模型”菜单

3)然后在实体数据模型中找到该实体(或创建一个新的实体)并连接存储过程以插入,更新和删除函数-右键单击该实体,然后选择“存储过程映射”菜单

4)使用LinqToEntity通过Database.BeginTransaction()添加/修改实体,然后在上下文上调用SaveChanges(),然后提交或回滚。

注意:默认情况下,从EF6 Database.ExecuteSqlCommand()开始,会将命令包装在一个事务中(如果尚不存在)。 此方法有很多重载,允许您在需要时覆盖此行为。 同样,在EF6中,通过诸如ObjectContext.ExecuteFunction()之类的API执行包含在模型中的存储过程也是如此(但当前无法覆盖默认行为)。 无论哪种情况,事务的隔离级别都是数据库提供者认为其默认设置的隔离级别。 例如,默认情况下,在SQL Server上,这是READ COMMITTED。 https://msdn.microsoft.com/en-us/data/dn456843.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM