我正在使用EF 6和DB first方法,我面临着速度慢的问题。我的餐桌数超过了600桌。这方面的任何帮助都将是有帮助的。
我创建了一个数据访问类,以便使用单例方法获取数据。任何好的链接或文章都可能会有所帮助。
让我分享一下我的数据模型方法
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;
}
}
发布于 2019-01-10 08:24:56
600个表是一个很大的系统大小。需要考虑的几个因素是确定是否可以隔离应用程序/系统的各个区域以利用较小的DbContexts。(在有界上下文中搜索)这更容易使用DB-First方法进行设置,在这种方法中,您可以将EF配置为现有模式,而不是尝试让EF管理模式和迁移。上下文类越小,初始化速度越快。
另一个考虑因素是,我会对尝试使用静态上下文保持警惕。这暗示有一个比所需的DbContext更长的生命周期。DbContexts不会很好地“老化”,因为它们内置的更改跟踪意味着它们的内存使用量增加,性能随着它们意识到的实体数量的增加而下降。有界上下文将有助于DbContext的启动时间,这意味着您可以让它们保持较短的寿命。
https://stackoverflow.com/questions/54111074
复制相似问题