使用实体框架的数据访问层的建议
我想了解您对这个问题的看法:
我使用实体框架和泛型类编写了一个数据访问层。因为在 C# 中使用事务并不是最佳实践:System.Transactions、SqlConnection 和超时问题
我想写我的选择使用 Linq To Entities 的语句,但在存储过程中使用其他语句,例如“INSERT,DELETE,UPDATE,...”(因为它必须与其他一些语句处于事务中),并在数据访问层中调用它们。
好不好?与分层不一致吗?有人可以演示一些文章吗?
多谢
I want to get you view point about this Question:
I write a Data Access Layer using Entity Framework and generic classes.because using transaction in C# is not very best practice : Issue with System.Transactions,SqlConnection and Timeout
I want to write my select statement using Linq To Entities but other statement such as "INSERT,DELETE,UPDATE,..." in Stored Procedures(because it must be in transaction with some other statements) and call them in Data access layer.
Is it good? Is it inconsistent with tiering?Can anyone demonstrate some articles?
thanks a lot
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用实体框架编写整个数据访问层。对于事务,您可以使用 EF Context。如果有单个数据库,这将自动为您管理事务。
您是否有任何理由不想使用 EF 进行插入/更新/删除?
You can write entire data access layer using Entity Framework. For Transaction you can use EF Context. This will automatically manage transaction for you if there is single database.
Is there any reason you don't want to do Insert/Update/Delete using EF?
您可以同时使用
TransactionScope
来实现此目的与EF。这将允许您在 EF 之上添加将被兑现的事务(环境事务)。You can use a
TransactionScope
for this together with EF. This will allow you to add transactions on top of EF that will be honored (an ambient transaction).您可以使用函数导入来执行存储过程。然后,您显然可以将所有事务逻辑包装在这些存储过程中。我喜欢实体框架,但也有一些与您相同的担忧。函数导入是我完成大部分事务处理和复杂逻辑的方式。
然后您的代码将如下所示(以简化的方式)...
You can use function imports to execute stored procedures. You can then obviously wrap all of your transaction logic within those stored procedures. I love the entity framework but have some of the same concerns that you do. The function imports are how I have accomplished the majority of my transactional processing and complex logic.
Your code would then look like this (in a simplified fashion)...