我有一个使用实体框架与数据库交互的 asp.net 应用程序。
在我现在正在开发的新版本中,我需要将应用程序与数据库分开,以便它可以与具有相似数据但不同模式的各种数据库一起使用。(可用于新客户)
到目前为止,这是我的方法,但感觉不对
- 我有来自客户端数据库生成的数据实体模型的对象
- 我自定义编写了我的系统将使用的对象
- 我编写了一个界面,概述了返回我的自定义对象的所有数据操作
- 我编写了一个接口实现,它从连接到他们的数据库的实体框架中获取我的客户对象,并将我想要的字段加载到我的自定义对象中。
这感觉不对,因为现在我有两组类似的对象。
例如,这里我salesOrders
从客户端数据库中获取数据,并将数据转储到我的自定义Job
对象中:
public List<Job> getJobs()
{
List<Job> jobs = new List<Job>();
using (var context = new TBDIEntities.TBDIEntities())
{
//get all future events that are not cancelled
List<SalesOrder> salesOrders = context.SalesOrders
.Where(c => c.EVENTCONFIRMATION != "CANCELLED" && c.FUNCTIONDATE >= DateTime.Now)
.ToList<SalesOrder>();
jobs.AddRange(from order in salesOrders
let dateTime = order.FUNCTIONSTARTTIME
where dateTime != null
select new Job
{
Description = order.FUNCTIONTYPE,
StartTime = (DateTime)dateTime,
Id = order.SALESORDERREF_TXNID.ToString(),
ShiftGroups = new List<ShiftGroup>(),
Status = order.EVENTCONFIRMATION,
ShiftCount = (int)context.BSS_ShiftListView
.Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID),
ConfirmedShifts = (int)context.BSS_ShiftListView
.Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID && c.Confirmed != null),
Client = new Client { Name = order.CustomerRef_FullName }
});
}
return jobs;
}
因此,我正在创建一个新上下文,获取salesOrders
(客户端数据库中的表名)的集合,然后从中获取数据salesOrders
并创建新Job
对象(我编写的应用程序将与之交互的对象)并返回Job
对象。
这感觉不对,因为现在我有 2 个相似对象列表(SalesOrders
和Jobs
),我必须为每个对象编写 CRUD 操作,而不仅仅是使用实体框架。
例如,我有一个页面,您可以在其中添加新班次。但是Shifts
表会因客户端而异,我所做的更改需要更新客户端表。那么如何编写可以使用班次的代码,但又可以将实体框架换成新客户端的模式呢?我需要像班次这样的东西放在一个集合中,我可以用它来数据绑定一个asp:ListView
.
这样做最聪明的方法是什么?如何使用实体框架但独立于客户模式,以便我的项目可以重用于许多数据库?