我正在使用实体框架与数据库交互,我想创建一个通用的插入函数!
我已经让它与独立表一起使用,即向客户表添加一条新记录,该表使用 Set 函数来获取正确类型的表。但问题是交叉引用表被映射到实体框架中的列表中 - 符合面向对象的接口(所以我明白为什么)。但是,我如何才能在通用庄园中解释此类插入,因为通常我将处理整个实体,但是我有一些场景需要处理实体内的列表。
当然,我可以创建特定的方法来处理这些特定情况,但我真的想避免这样做!
我的一个想法是创建一个Type, Action的字典,类型是与服务可能接收的列表插入相关联的 DTO 类型,而操作是用于处理列表的特定插入代码,这样我仍然可以使用泛型insert 函数,只需检查字典中是否有任何与通用插入代码相反的“插入规则”应该执行。从客户端编程的角度来看,这种方式只使用了一个插入函数。但这仍然需要编写特定的插入代码——我真的很想避免。
我对 EF 没有太多经验 - 所以我想知道的是我有没有更清洁的选择来解决这个问题?
演示我的问题的代码:
普通的通用插入 -
public void InsertRecord(object newRecord, )
{
using (PIRSDBCon db = new PIRSDBCon())
{
var table = db.Set(newRecord.GetType());
table.Add(newRecord);
db.SaveChanges();
}
}
正如您所看到的,它处理标准插入到表中
插入交叉引用表 -
public void InsertCarerCheck(int carer_id, Check newCheck)
{
using (PIRSDBCon db = new PIRSDBCon())
{
Foster_Carers carer_record = (from c in db.Foster_Carers
where c.foster_carer_id == carer_id
select c).SingleOrDefault();
carer_record.Checks1.Add(newCheck);
db.SaveChanges();
}
}
Checks1 是由 EF 为链接寄养照顾者和检查记录的交叉引用表生成的列表属性。如何在通用插入函数中考虑这样的场景?