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

发布于 2024-10-21 19:22:01 字数 417 浏览 3 评论 0原文

我想了解您对这个问题的看法:

我使用实体框架和泛型类编写了一个数据访问层。因为在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

安人多梦 2024-10-28 19:22:01

您可以使用实体框架编写整个数据访问层。对于事务,您可以使用 EF Context。如果有单个数据库,这将自动为您管理事务。

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 进行插入/更新/删除?

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.

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();
}

Is there any reason you don't want to do Insert/Update/Delete using EF?

叫嚣ゝ 2024-10-28 19:22:01

我想写我的选择语句
使用 Linq To Entities 但其他
声明如
存储中的“插入、删除、更新...”
程序(因为它必须在
与其他人的交易
语句)并在数据中调用它们
接入层。

您可以同时使用 TransactionScope 来实现此目的与EF。这将允许您在 EF 之上添加将被兑现的事务(环境事务)。

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

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.

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).

using (TransactionScope transaction = new TransactionScope())
{
    //your EF query here
    using(var context = new EFContext())
    { } 
}
寄离 2024-10-28 19:22:01

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

然后您的代码将如下所示(以简化的方式)...

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

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)...

using (var context = new YourContext())
{
    context.ExecuteProcToRunTransaction("parameter 1", "parameter 2");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文