我已经在我的应用程序中实现了存储库模式。界面如下:
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()));
但发生了两件事:
由于UserService
需要类型为User
的存储库
失败,因为模型不是预期的类型User
。
如果出现了一些魔法,并且没有更改任何类型的模型
UserService
,新属性在实现中不会被看到
UserService,因为模型仍然是User
为什么我要求替代
ddl已经开发了,我不想添加新的DbSet 数据库上下文,以防我使用EF存储库仅因为 一个客户 t。
我想避免这样一个事实:我需要将新属性添加到User模型,因为(再次),一个客户端。
UserService
已经恢复IRepository<User>
实施,并且在我提到的所有这些情况下,将其更改为MyCustomModel将需要很多时间。
还有另一种解决这种情况的方法(就像其他模式一样)吗?我做错了吗?
我尝试了visitor pattern,但我不知道我能用它做到这一点。
任何事情都会受到赞赏。