【发布时间】:2021-09-15 11:15:52
【问题描述】:
我有一个已经存在的 SQL 数据库,例如表 Car,看起来像这样
public class Car
{
public string Brand { get; set; }
public string AvailableColorsCommaSperated { get; set; }
}
现在我正在努力迁移到 MongoDb,以便数据看起来像这样
public class Car
{
public string Brand { get; set; }
public List<string> Colors { get; set; }
}
但我必须同时维护 SQL 数据库,因为即使在迁移后它仍会继续使用一段时间。
现在在我的 DAL 层中,我有一个主接口和类,看起来像存储库模式,接口就是这样的
public interface ICarDAL
{
List<Car> GetAllCars();
}
public class CarDAL : ICarDAL
{
private readonly ICarSQL carSQL;
public CarDAL(ICarSQL carSQL)
{
this.carSQL = carSQL;
}
public List<Car> GetAllCars()
{
return carSQL.GetAllCars();
}
}
在使用 SQLContext 实现的同时,另一个具有实现的接口和类存在
public interface ICarSQL : ICarDAL
{
new List<Car> GetAllCars();
}
public class CarSQL : ICarSQL
{
private readonly DbContext dbContext;
public CarSQL(DbContext dbContext)
{
this.dbContext = dbContext;
}
public List<Car> GetAllCars()
{
// Get Cars..
}
}
我可以为 Mongo 添加一个单独的层以从 ICarDAL 继承并自行实现功能,但问题是我将为它们中的每一个都有不同的汽车模型(汽车只是一个例子)
如何抽象 DAL 层,以便我可以使用不同的模型对不同的数据库进行 CRUD 操作?我需要不同的上下文还是使用同一个工厂来区分不同的数据库类?
【问题讨论】:
标签: c# sql .net-core design-patterns entity-framework-core