【发布时间】:2021-12-22 17:47:10
【问题描述】:
我正在四处寻找一种方法来统一一些数据库的数据访问层,这些数据库具有相同的字段类型但驻留在不同的 EF DB 上下文中。我想出了这样的东西(请忽略字符串插值,这只是一个原型):
public static T FetchEvent<T>(System.Data.Entity.DbContext dbContext, int eventId) where T : class, IEvent
{
var record = dbContext.Database.SqlQuery<T>($"SELECT * FROM Events WHERE EventId = {eventId}").SingleOrDefault();
return record;
}
每个数据库都有一个 Events 表,相关的 EF 实体实现 IEvent,其中 IEvent 只是模拟表结构的字段及其数据类型。使用通用 T 参数,在检索记录时由调用代码指定正确的本地 EF 实体类型。
代码运行并返回记录,但是动态代理对象上的 EF 上下文为空,因此您无法对实体进行任何更新。
我的问题:当我以这种方式检索记录时,有没有办法让 EF 上下文保持不变?
【问题讨论】:
-
警告您的代码为潜在的 sql 注入做好准备
-
什么版本的ef?
-
@DanielA.White 这是 EF 6
-
@Guru Stron 的回答能解决你的问题吗?
-
@SaeedEsmaeelinejad 是的:]
标签: c# sql entity-framework generics