EF和存储库模式

时间:2011-01-24 16:33:27

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

我正在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实体类而不是接口吗?

欢呼声。

5 个答案:

答案 0 :(得分:4)

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

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

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

这个非常棒,非常完整,并且具有很多功能。

答案 1 :(得分:1)

NumberOfFollowers将是User本身的属性,而不是存储库接口。

善,

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我同意丹尼尔的回答 - 拥有一个名为NumberOfFollowers的财产是最符合逻辑的。作为指南,如果有可以通过User对象本身访问的数据,则直接在User类上创建属性\方法。如果你有其他表的foregin键,那么访问这些数据项可以通过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.
    } }

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

答案 4 :(得分:0)

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

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