在向模型添加新成员时处理存储库模式

时间:2015-03-17 13:47:56

标签: c# entity-framework design-patterns repository-pattern

我已经在我的应用程序中实现了存储库模式。界面如下:

public interface IRepository<T> where T : class
{
  void Insert(T entity);
  void Delete(T entity);
  IEnumerable GetAll();
  // and more...
}

存储库的默认实现位于Entity framework repository pattern。因此,如果我想使用存储库(已经在ddl中,如API)使用我的服务,我会这样做:

var uService = new UserService(new EFRepository<User>(new Context()));

我的情况是,有一个模型需要向该模型添加一个名为situation的新属性,但该公司的一个客户端只有 。其他人不需要存在该属性。

我做的是这个:

class MyCustomModel : User{

 public int Situation { get; set;}// new property

}
//mean while in another class

 UserService bService = new UserService(new EFRepository<MyCustomModel>(new Context()));

但发生了两件事:

  1. 由于UserService需要类型为User的存储库 失败,因为模型不是预期的类型User

  2. 如果出现了一些魔法,并且没有更改任何类型的模型     UserService,新属性在实现中不会被看到     UserService,因为模型仍然是User

  3. 的类型

    为什么我要求替代

    1. ddl已经开发了,我不想添加新的DbSet 数据库上下文,以防我使用EF存储库仅因为 一个客户 t。

    2. 我想避免这样一个事实:我需要将新属性添加到User模型,因为(再次),一个客户端。

    3. UserService已经恢复IRepository<User>实施,并且在我提到的所有这些情况下,将其更改为MyCustomModel将需要很多时间。

      还有另一种解决这种情况的方法(就像其他模式一样)吗?我做错了吗?

      我尝试了visitor pattern,但我不知道我能用它做到这一点。

      任何事情都会受到赞赏。

0 个答案:

没有答案