繁体   English   中英

关于使用实体框架的数据访问层的建议

[英]Suggestion For Data Access Layer with Entity Framework

我想让您对这个问题有个看法:

我使用实体框架和通用类编写数据访问层。因为在C#中使用事务不是最佳实践: System.Transactions,SqlConnection和Timeout问题

我想使用Linq To Entities编写我的select语句,但要在存储过程中编写其他语句,例如“ INSERT,DELETE,UPDATE ...”(因为它必须与其他语句进行事务处理),然后在数据访问层中调用它们。

好吗? 与分层不一致吗?有人可以演示一些文章吗?

非常感谢

您可以使用实体框架编写整个数据访问层。 对于事务,您可以使用EF上下文。 如果只有一个数据库,它将自动为您管理事务。

using(var context = new YourDataContext())
{
   //use context for CRUD operation
   Entity1 entity1 = context.Entities1.Where(e1 => e1.Id == 1);
   entity1.Prop1 = "New Value";  

   context.Entities2.Add(entity2)

   context.SaveChanges();
}

您是否有任何不想使用EF进行插入/更新/删除的原因?

我想使用Linq To Entities编写我的select语句,但要在存储过程中编写其他语句,例如“ INSERT,DELETE,UPDATE ...”(因为它必须与其他语句进行事务处理),然后在数据访问层中调用它们。

您可以将TransactionScope与EF一起使用。 这将允许您在将被接受的EF之上添加事务(环境事务)。

using (TransactionScope transaction = new TransactionScope())
{
    //your EF query here
    using(var context = new EFContext())
    { } 
}

您可以使用函数导入来执行存储过程。 然后,您显然可以将所有事务逻辑包装在这些存储过程中。 我喜欢实体框架,但与您有一些相同的担忧。 函数导入是我完成大部分事务处理和复杂逻辑的方式。

然后,您的代码将看起来像这样(以简化的方式)...

using (var context = new YourContext())
{
    context.ExecuteProcToRunTransaction("parameter 1", "parameter 2");
}

暂无
暂无

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

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