在我们的Web.API项目中,我们使用Entity Framework 6。我们有一个DataModel类,其中包含DatabaseContext。DataModel是一个
就像这样:
我们在数据库中的另一张表中搜索对应的用户。虽然这种方法可行,但我认为并不是最优美的解决方案。特别是如果我们计划将项目迁移到.NET Core并使用依赖注入来管理数据库上下文时。
我的问题是,是否有更加优雅的模式可以解决这个问题?依赖注入在这里行不通,因为Entity Framework生成了模型对象。或者,如果我们将这段代码从部分类移动到例如一个工具类中,会更好吗?但是如何在那里注入上下文呢?
[ThreadStatic]
单例。就像这样:
public class DataModel
{
[ThreadStatic] private static DataModel _instance;
public static DataModel Instance => _instance ?? (_instance = new DataModel());
public DatabaseContext Context { get; private set; }
private DataModel()
{
Context = NewContext();
}
}
现在,在我们的一个(部分)模型类中,我们使用上下文进行如下操作:
public partial class Job
{
public User CreatedByUser
{
get { return DataModel.Instance.Context.Users.FirstOrDefault(d => d.Username == CreatedBy); }
}
}
我们在数据库中的另一张表中搜索对应的用户。虽然这种方法可行,但我认为并不是最优美的解决方案。特别是如果我们计划将项目迁移到.NET Core并使用依赖注入来管理数据库上下文时。
我的问题是,是否有更加优雅的模式可以解决这个问题?依赖注入在这里行不通,因为Entity Framework生成了模型对象。或者,如果我们将这段代码从部分类移动到例如一个工具类中,会更好吗?但是如何在那里注入上下文呢?
CreatedByUser
。您当前的解决方案不是线程安全的,特别是考虑到您有一个具有多个线程的asp.net应用程序(至少同时请求1次)。 - undefined