[英]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.