建立实体框架实体添加& ADO.Net存储过程INSERTS在一个Transaction内部

时间:2015-03-27 14:30:11

标签: c# ado.net entity-framework-5 ado.net-entity-data-model

我有一个应用程序,我正在使用Entity Framework或处理数据库表中的数据。有一个主表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 个答案:

答案 0 :(得分:0)

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

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

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

注意:从EF6 Database.ExecuteSqlCommand()开始,默认情况下会将命令包装在事务中(如果尚未存在)。此方法存在重载,允许您根据需要覆盖此行为。同样在EF6中,通过API(例如ObjectContext.ExecuteFunction())执行模型中包含的存储过程也会执行相同的操作(除了暂时不能覆盖默认行为)。在任何一种情况下,事务的隔离级别都是数据库提供程序认为其默认设置的隔离级别。默认情况下,例如,在SQL Server上,这是READ COMMITTED。 https://msdn.microsoft.com/en-us/data/dn456843.aspx

相关问题