
[英]How can I compare two IEnumerable<> objects and return a new one?
[英]How can I effectively map one application to two database backends during a conversion to a new vendor?
好的。 我使用MVC3开始了一个新项目。 我已经从NuGet实现了EF4.1,Automapper,Ninject,PagedList。
我花了两天时间充实了我的模式,建立了IOC和接口。 我将我的服务注入我的控制器,将我的存储库注入我的服务,将我的DbContext注入我的存储库。
我剩下的是一个运行的应用程序,一切都很好。 我遇到的问题是我们正在改变代理商主要系统的供应商。 这意味着数据库结构将发生重大变化。
我是否正确创建ICamaContext的两个具体实现和ICamaRepository的两个具体实现? 每个数据库一个? 然后在每个存储库中,我将相应的dbsets映射到我的类型以匹配ICamaRepository中定义的契约?
我不确定这是否有意义。 换句话说,无论使用哪个DB后端,我都不想重写我的服务中的任何内容。
namespace search.Common.Repositories
{
public interface ICamaRepository
{
IQueryable<Parcel> GetParcels();
}
public class AssessProCamaRepository : ICamaRepository
{
ICamaContext _db;
public AssessProCamaRepository(ICamaContext dataContext)
{
_db = dataContext;
}
public IQueryable<Parcel> GetParcels()
{
return from c in _db.DataProperty
select new Parcel
{
AccountNumber = c.AccountNumber
};
}
}
}
这听起来像是一种合理的方法。 但是,由于数据库结构将发生重大变化,因此提出新旧数据库结构之间通用的存储库层可能具有挑战性。
此外,根据数据库的差异,您可能无法为所有存储库方法返回IQueryable。
我不认为在存储库中抽象dbContext会给你带来任何好处,事实上在存储库中使用抽象的数据层并没有多大意义。
IMO几乎不可能创建一个可以通过不同的数据访问技术(甚至不同的ORM)使用(可实现)的抽象层,因此抽象数据层只会增加更多无用的复杂性。 最后,我建议为每个存储库创建两个版本,一个用于新结构,另一个用于旧结构,然后您的DI单元决定使用正确的一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.