【问题标题】:EF and Repository PatternEF 和存储库模式
【发布时间】:2019-06-16 03:00:09
【问题描述】:

我正在用 MVC 编写一个项目,并且正在使用 EF 4.0。我正在使用存储库模式,但不确定在哪里放置一些属性。

public interface IUserRepository<User> 
{
    User GetUserById(int userId);
    void UpdateUser(User user);
    void AddUser(User user);
    List<User> GetUsersByName(string userName);             
    void Create(User user);      
    int NumberOfFollowers { get; set; }     
}

我的两个问题是 1)。属性NumberOfFollowers 应该是属性还是方法? 和 2)。应该放在User实体类里面而不是接口里面?

干杯。

【问题讨论】:

    标签: c# model-view-controller interface entity-framework-4 repository-pattern


    【解决方案1】:

    如果NumberOfFollowers 是用户的属性,它肯定应该在User 类上,而不是存储库上。存储库只负责获取/放置数据。

    这是我最喜欢的 EF 存储库实现:

    http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

    这个太棒了,非常完整,有很多功能。

    【讨论】:

      【解决方案2】:

      re:属性或方法,.NET Design Guideless 规定它不应该是属性,如果它可以 a) 抛出和异常或 b) 需要相当长的时间才能返回。

      【讨论】:

        【解决方案3】:

        NumberOfFollowers 将是用户本身的属性,而不是在存储库界面中。

        【讨论】:

        • 这应该是一条评论。
        • 我创建了一个名为 IUser 的接口,其属性名为 NumberOfFollowers,但我在使用 EF 实体类型从用户实体类派生它时遇到问题。
        【解决方案4】:

        我同意 Daniel 的回答 - 拥有一个名为 NumberOfFollowers 的属性是最合乎逻辑的。作为指导,如果您可以通过User 对象本身访问数据,则直接在User 类上创建属性\方法。通常,如果您有其他表的外键,则可以通过 User 类访问这些数据项,并且应该封装在 properties\methods 中。

        另一方面,如果您想查找与User 相关的信息,但需要另一个对象的帮助,则创建一个UserService 类。保持存储库简单 - 仅具有数据检索\操作方法,并在单独的服务类中创建更多涉及/业务逻辑饥饿的方法,例如

        public class UserService {
            private DbContext Context {get; set;}
        
            public IList<Document> GetUserDocument(User user)
            {
                // Assuming User table does not have a Document ID as a foregin key..
                // Do whatever you need to do to get document.
            } }
        

        以上是粗略的指导,绝不是事实上的标准,但对我来说效果很好。

        【讨论】:

        • 那么您是否建议将接口中的所有上述方法放入EF创建的用户实体类中?
        【解决方案5】:

        我写了一篇关于它的blog 并介绍了如何抽象 ORM 提供者特定的功能、每个请求对象上下文管理、管理来自多个数据库的模型、具有完整源代码和示例的工作单元模式的事务管理。

        如果您有任何问题,请查看并告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-05
          • 2023-03-21
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多