【问题标题】:How to add custom methods with database logic如何使用数据库逻辑添加自定义方法
【发布时间】:2013-11-05 06:50:59
【问题描述】:

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

  • MyProject.Model:包含 POCO。示例:
public class Car
{
     public int Id { get; set; }
     public string Name { get; set; }
}
  • MyProject.存储库:包含存储库和 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 中,但是我觉得这里不适合放这样的代码,可以在应用的很多地方调用。

注意:我使用的是实体框架。

对如何实施此类操作有什么建议吗?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework repository-pattern


    【解决方案1】:

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

    在服务模式中,您专门只为您需要的东西提供端点,因此它是GetSimilarCars 之类的完美候选者,因为您只需向服务添加另一个方法来封装其逻辑。

    【讨论】:

      【解决方案2】:

      我假设您的业务层 (BL) 将与您的数据访问层 (DAL) 进行通信。这样,您就可以从您的 BL 访问 DAL 中的不同存储库。这将解决您的存储库无法共享数据的问题(该数据将通过 BL 共享)。

      请看这里:N-tier architecture w/ EF and MVC

      【讨论】:

        【解决方案3】:

        我并没有完全回答您的问题,但这就是您分配值的方式。并将其添加到集合中

        public class Repository<T>
            {       
        
            List<car> _lstCar=new List<car>();
            //Add
            car cobj=new car();
            cobj.Id="1234";
            cobj.Name="Mercedes";
        
            _lstCar.Add(cobj);
        
            }
        

        【讨论】:

        • 是的,但是如何从数据库中获取这些值呢?在每个存储库中,我都无权访问 UnitOfWork 或其他存储库
        • 如果是 SQL DB,你必须添加 SQLconnection 并执行查询来获取你需要的数据。
        • 如果您在项目中添加了数据库。创建表的对象并完成其余的工作。
        猜你喜欢
        • 2011-02-13
        • 1970-01-01
        • 2022-11-12
        • 2015-05-14
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        • 2019-05-27
        • 2011-02-17
        相关资源
        最近更新 更多