C# EF和存储库模式

C# EF和存储库模式,c#,model-view-controller,interface,entity-framework-4,repository-pattern,C#,Model View Controller,Interface,Entity Framework 4,Repository Pattern,我正在用MVC编写一个项目,并且正在使用EF4.0。我正在使用存储库模式,但不确定将某些属性放置在何处 public interface IUserRepository<User> { User GetUserById(int userId); void UpdateUser(User user); void AddUser(User user); List<User> GetUsersByName(string userName);

我正在用MVC编写一个项目,并且正在使用EF4.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; }     
}
公共接口存储库
{
用户GetUserById(int userId);
void UpdateUser(用户);
void AddUser(用户);
列出GetUsersByName(字符串用户名);
作废创建(用户);
int NumberOfFollowers{get;set;}
}
我的两个问题是1)。属性
NumberOfFollowers
应该是属性还是方法? (二)。它应该放在用户实体类中而不是界面中吗


干杯。

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

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

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

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


这一个非常棒,非常完整,并且有很多特性。

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

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


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

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

re:property或method,.NET Design Guideless规定,如果它可以a)抛出和异常,或者b)花费相当长的时间返回,则不应将其作为属性。

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

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

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.
    } }
公共类用户服务{
私有DbContext上下文{get;set;}
公共IList GetUserDocument(用户)
{
//假设用户表没有文档ID作为foregin键。。
//做任何你需要做的事情来获得文件。
} }

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

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

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

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.
    } }
公共类用户服务{
私有DbContext上下文{get;set;}
公共IList GetUserDocument(用户)
{
//假设用户表没有文档ID作为foregin键。。
//做任何你需要做的事情来获得文件。
} }
以上只是粗略的指南,并不是事实上的标准,但对我来说效果很好。

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

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

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


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

这应该是一个注释。我已经创建了一个名为IUser的接口,其属性名为NumberOfFollowers,但我在使用EF实体类型从用户实体类派生它时遇到问题。这应该是一个注释。我已经创建了一个名为IUser的接口,其属性为NumberOfFollowers属性名为NumberOfFollowers,但我在使用EF实体类型从用户实体类派生它时遇到问题。因此,您是否建议将接口内的所有上述方法放入EF创建的用户实体类?因此,您是否建议将接口内的所有上述方法放入创建的用户实体类通过EF?