我在Javascript中的事件处理程序中遇到以下问题.我有一个像这样有一个mousemove事件处理程序的对象.
function MyObject(){ }
function MyObject.prototype = {
currentMousePosition: null,
onMouseMove: function(ev){
this.currentMousePosition = this.getCoordinates(ev);
},
getCoordinates: function(ev){
if (ev.pageX || ev.pageY)
return { x: ev.pageX, y: ev.pageY };
return { x: ev.clientX + document.body.scrollLeft - document.body.clientLeft, y: ev.clientY + document.body.scrollTop - document.body.clientTop };
}
};
Run Code Online (Sandbox Code Playgroud)
我试图解决的问题解决了对象上下文.在我的onMouseMove函数中,它分配currentMousePosition属性.当然这不起作用,因为它是处理mousemove事件的静态函数.
我正在寻找的是一种使用我的事件处理程序传递对象上下文的技术/方法.我能想到的最好的例子是Google Maps API函数GEvent.bind()有了它,您可以使用要在指定事件上触发的函数传递对象.我基本上都在寻找同样的东西.
在ASP.NET MVC 2中,使用Entity Framework 4,我收到此错误"实体对象不能被IEntityChangeTracker的多个实例引用".
对SO的搜索表明,可能是因为我有不同的Entity Framework ObjectContext实例,而它应该只是每个HttpContext的一个ObjectContext实例.
我有这个代码(在我加入之前写的很久)似乎就是这样 - 每个HttpContext都有一个ObjectContext.但我经常收到"IEntityChangeTracker"异常,因此它可能无法正常工作:
// in ObjectContextManager.cs
public const string ConnectionString = "name=MyAppEntities";
public const string ContainerName = "MyAppEntities";
public static ObjectContext GetObjectContext()
{
ObjectContext objectContext = GetCurrentObjectContext();
if (objectContext == null) // create and store the object context
{
objectContext = new ObjectContext(ConnectionString, ContainerName);
objectContext.ContextOptions.LazyLoadingEnabled = true;
StoreCurrentObjectContext(objectContext);
}
return objectContext;
}
private static void StoreCurrentObjectContext(ObjectContext objectContext)
{
if (HttpContext.Current.Items.Contains("EF.ObjectContext"))
HttpContext.Current.Items["EF.ObjectContext"] = objectContext;
else
HttpContext.Current.Items.Add("EF.ObjectContext", objectContext);
}
private static ObjectContext GetCurrentObjectContext()
{ …Run Code Online (Sandbox Code Playgroud) 我们有一个多层的Asp.NET Web窗体应用程序.数据层有一个名为DataAccessimpements 的类,IDisposable并且我们将Entity Framework Object Context的实例作为私有字段.该类有许多公共方法返回各种实体集合,并在处理时将处置其对象上下文.
由于我们一直面临的许多问题,我们认为DataAccess在服务器上保持对象上下文(或实例)的范围更长是一个很大的好处.有人建议,以保持一个实例在HttpContext.Current.Items收集从这个职位,以便让每个Http请求一个实例.
我想知道的是:在HttpContext.Current.Session对象中存储我们的对象上下文的实例会产生什么问题/顾虑/问题?
这将相对快速地实施,并且不会影响我们现有的许多单元测试.
我们将使用AutoFac和ServiceProvider类来提供实例.当需要ObjectContext的实例时,它将由类似于此的代码返回:
private static Entities GetEntities(IContext context)
{
if (HttpContext.Current == null)
{
return new Entities();
}
if (HttpContext.Current.Session[entitiesKeyString] == null)
{
HttpContext.Current.Session[entitiesKeyString] = new Entities();
}
return (Entities)HttpContext.Current.Session[entitiesKeyString];
}
Run Code Online (Sandbox Code Playgroud)
干杯.
我一直在尝试更新我的代码在数据库查询方面的性能.我目前遇到的问题是我似乎找不到为每个子查询获取新上下文的方法.
使用以下简化代码将不正确地生成"基础提供程序在打开时失败".
using (var context = getNewContextObject())
{
var result = new SomeResultObject();
var parentQuery = context.SomeTable.Where(x => x.Name = "asdf");
Parallel.Invoke(() =>
{
result.count1 = parentQuery.Where(x => x.Amount >= 100 & x.Amount < 2000).Count();
}, () =>
{
result.count2 = parentQuery.Where(x => x.Amount < 100).Count();
}
, () =>
{
result.count3 = parentQuery.Where(x => x.Amount >= 2000).Count();
}
);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,解决这个问题的唯一方法似乎是使用新的上下文重建每个子查询的整个查询.有没有办法避免使用新的Context自下而上构建每个查询?我可以将每个子查询查询附加到新上下文吗?我正在寻找类似下面的东西.
Parallel.Invoke(() =>
{
var subQuery = parentQuery.Where(x => x.Amount >= 100 & x.Amount < 2000).Count();
subQuery.Context = getNewContextObject(); …Run Code Online (Sandbox Code Playgroud) multithreading entity-framework iqueryable task-parallel-library objectcontext
这似乎比它应该更难.
我正在使用MVC3,SQL Compact Edition和Entity Frameworks Code First编写事件注册站点,并使用Steven Sanderson的Mvc Scaffolding NuGet包.
由于事件列表不太可能发生太大变化,因此我将其缓存到Application_Start方法的全局列表中:
var repo = new RaceEventRepository();
EventRaces =
repo.All.Where(r => r.RaceName.Contains(eventName)).Select(r => r).ToList();
Run Code Online (Sandbox Code Playgroud)
其中RaceEventRepository是由MvcScaffolding构造的存储库类,并且执行
EventContext context = new EventContext();
Run Code Online (Sandbox Code Playgroud)
然后在存储库中使用它,并且(我假设)在存储库被处置时被处置掉.和EventRaces是一个全球可用的列表.
我的问题是,当我创建一个带有外键的注册人记录回到存储在EventRaces中的RaceEvent时,我收到一个错误"IEntityChangeTracker的多个实例无法引用实体对象."
根据几篇博客文章和SO答案,我需要从上下文中分离缓存的实体,如本文清单1所示.
我的问题是,使用ObjectBrowser,我找不到任何带有Detach方法的东西.存储库中的上下文没有.上下文中的各个DbSets没有(尽管它们具有Attach()方法).System.Data.Object.ObjectSet有一个,但我找不到DbSet和ObjectSet之间的映射.
显然,我错过了一些东西.有人能指出我正确的方向吗?
当我使用Entity Framework时,我想在上下文中查询记录并将其添加到具有相同模式的另一个上下文中,在查询记录后,我将其从上下文中分离出来,但是相关的实体都已经离开,是否存在有什么方法可以解决吗?
提前致谢!
我正在使用实体框架的ASP.NET Web窗体应用程序,我想知道我应该如何处理ObjectContext它的生命周期.例如,我有一个InviteService管理邀请的类,例如创建和接受邀请.该类本身位于Web项目的另一个项目/命名空间中.一种InviteUsers()方法创建Invite了一个用户列表的实体,调用库将它们保存到数据库和邮件的每个用户的邀请链接.
从Page用户单击邀请按钮时调用该方法.
我想知道我该怎么用 ObjectContext
ObjectContext在每个Request上的Page上实例化一个new ,将其作为参数传递给InviteService类的构造函数,然后将其置于Render方法中.Objectcontext使用using块在每个方法中创建单独的.根据Ladislav的答案,选项一对我来说似乎最好:实体框架和连接池 但是选项3似乎也是有效的,因为据我所知,由于连接池没有建立新的数据库连接.
我曾经在wcf数据服务服务操作中访问我的(ef 5.0)实体的数据上下文this.CurrentDataSource.MyEntity.我的数据服务继承自DataService<T>.现在我想使用实体框架6.0并在互联网上阅读,我应该继承服务EntityFrameworkDataService<T>.但是现在从我的服务操作中,我再也无法访问我的数据上下文了.this.CurrentDataSource不包含对实体的任何引用.
我想确认实体框架的ObjectContext.Connection.BeginTransaction()方法返回的事务是否使用MSDTC(Microsoft分布式事务处理协调器)的支持?
有没有办法在没有MSDTC支持的情况下使用交易?
msdtc entity-framework transactions distributed-transactions objectcontext
因为ObjectContext.SaveChanges()在一个事务中发生,我认为最好是我的应用程序首先执行所有查询/更新,ObjectContext然后再调用SaveChanges()一次将数据写入数据库.
但是这样做意味着如果我创建一个对象并且后续查询ObjectContext它会否认它存在(假装因为数据库尚未更新).我以为我可以通过一些SaveOptions解决这个问题,但它看起来并不像我能做到的那样.
我基本上希望它ObjectContext像一个代理,我可以修改,因为我希望一次性提交.有没有办法实现这个目标?
objectcontext ×10
c# ×3
asp.net ×2
.net ×1
ado.net ×1
detach ×1
httpcontext ×1
iqueryable ×1
javascript ×1
linq ×1
msdtc ×1
oop ×1
oracle ×1
session ×1
transactions ×1