我正在将EF 6与数据库优先方法一起使用,并且面临速度慢的问题。我的餐桌人数超过600。在这方面的任何帮助都会有所帮助。
我创建了一个dataaccess类,以便使用单例方法获取数据。任何好的链接或文章都可能有所帮助。
让我分享我的数据模型方法
DataAcess.cs
public class DataAccess
{
internal Model.Entities _ctx = null;
private static DataAccess self = null;
public object ModulePermission;
private DataAccess()
{
var tmp = new ConnectionStringBuilder(Utility.GetConnectionString());
_ctx = new Model.Entities(tmp.CaliberMatrixString);
// temporarily dissabling the EF entity validation - it should be removed in the next code sync.
_ctx.Configuration.ValidateOnSaveEnabled = false;
}
public static DataAccess Instance
{
get
{
var context = HttpContext.Current;
if (context != null)
{
const string kApplicationSettings = "ApplicationObject";
if (context != null && context.Items[kApplicationSettings] != null)
{
var da = context.Items[kApplicationSettings] as DataAccess;
return da;
}
self = new DataAccess();
context.Items[kApplicationSettings] = self;
}
else
{
self = new DataAccess();
}
return self;
}
}
public void Save()
{
_ctx.SaveChanges();
}
internal Model.CaliberMatrixEntities Ctx { get { return _ctx; } }
public void Dispose()
{
if (self != null)
{
//DataAccess.Instance.Dispose();
const string kApplicationSettings = "ApplicationObject";
var context = HttpContext.Current;
if (context != null && context.Items[kApplicationSettings] != null)
context.Items[kApplicationSettings] = null;
_ctx.Dispose();
_ctx = null;
GC.SuppressFinalize(this);
self = null;
}
}
答案 0 :(得分:0)
600个表是很大的系统大小。需要考虑几个因素,以确定是否可以隔离应用程序/系统的区域以利用较小的DbContext。 (在有界上下文中搜索)使用DB-First方法更容易进行设置,在该方法中,您将EF配置为现有架构,而不是尝试让EF管理架构和迁移。较小的上下文类可以更快地初始化。
另一个考虑因素是,我会谨慎尝试使用静态上下文。这暗示了DbContext的寿命比需要的更长。 DbContext不能很好地“老化”,因为它们的内置更改跟踪意味着它们的内存使用量增加,并且随着它们意识到的实体增多,性能也会下降。有界的上下文将帮助缩短DbContext的启动时间,这意味着您可以使它们短暂存在。