gpt4 book ai didi

c# - 如何使用数据库逻辑添加自定义方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:07 28 4
gpt4 key购买 nike

我用这种架构创建了一个应用程序:

  • MyProject.Model:包含 POCO。示例:
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
}
  • MyProject.Repositories:包含存储库和 UnitOfWork
public class UnitOfWork
{
// ...
public Repository<Car> Cars { get; set; }
// ...
}

public class Repository<T>
{
// ...
// Add / Update / Delete ...
// ...
}
  • MyProject.Web:ASP.Net MVC 应用

现在我想找到一种使用方法与数据进行交互的方法。例如,在 MyProject.Model.Car 中,我想添加一个方法来获取具有非导航属性的数据,该方法名为“GetSimilarCars()”。问题是存储库无法与其他存储库交互,因此无法对数据库执行操作。

我真的不知道如何以简单的方式做到这一点,也不知道在我的架构中放置它的最佳位置是什么。

另一个示例可以是 UserGroup.Deactivate(),此方法将停用每个用户并通过电子邮件向他们发送通知。当然我可以把这个方法放在 Web 应用程序 Controller 中,但我认为这不是放置可以在应用程序中的许多地方调用的代码的地方。

注意:我使用的是 Entity Framework 。

关于如何实现此类操作有什么建议吗?

最佳答案

这种类型的东西会进入您的 DAL(在这种有限的情况下,本质上是您的工作单元和存储库)。但是,当我第一次开始使用 MVC 时,这种模式让我很头疼。 Entity Framework 已经实现了这些模式;您的 DbContext 是您的工作单元,您的 DbSet 是您的存储库。所有在此之上创建另一个层都会增加复杂性。我个人最终选择了服务模式,它仅位于 EF 之上并允许我执行 someService.GetAllFoo() 之类的操作。这样, Entity Framework 的使用就被抽象化了(我可以随时切换 DAL。我什至可以完全删除数据库并改用 API,而无需更改应用程序其余部分的任何代码。)但我也不只是重新发明轮子。

在服务模式中,您专门只为您需要的东西提供端点,因此它非常适合像 GetSimilarCars 这样的东西,因为您只需向服务添加另一个方法来封装逻辑。

关于c# - 如何使用数据库逻辑添加自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com