还有另一种解决方案,使用connected properties。
使用连接的属性应该是这样的(警告:未经测试的代码):
public partial class Database1Entities
{
private struct ObjectContextProperty { }
partial void OnContextCreated()
{
this.ObjectMaterialized += (_, e) =>
{
e.Entity.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(this);
};
this.ObjectStateManager.ObjectStateManagerChanged += (_, e) =>
{
if (e.Action == CollectionChangeAction.Add)
{
e.Element.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(this);
}
else if (e.Action == CollectionChangeAction.Remove)
{
e.Element.GetConnectedProperty<Database1Entities, ObjectContextProperty>().Set(null);
}
};
}
/// <summary>
/// Gets the object context for the entity. Returns <c>null</c> if the entity is detached.
/// </summary>
/// <param name="entity">The entity for which to return the object context.</param>
public static Database1Entities FromEntity(EntityObject entity)
{
return entity.GetConnectedProperty<Database1Entities, ObjectContextProperty>().GetOrConnect(null);
}
}
然后你可以使用Database1Entities.FromEntity
摆脱实体对象的对象范围内。对实体对象是可选的
public partial class Table1
{
/// <summary>
/// Gets the object context for this entity. Returns <c>null</c> if the entity is detached.
/// </summary>
public Database1Entities ObjectContext { get { return Database1Entities.FromEntity(this); } }
}
在这种解决方案中,ObjectContext
属性:您还可以定义在实体对象的实际属性,以及如果你想要的。
感谢您的确切答复,拉迪斯拉夫。我必须不同意你的说法,“这是你应该尽可能避免的事情”。显然,这是必要的,否则关于如何做的问题和帖子将永远不会写出来。有一种方法可以获得对大多数实体实例的ObjectContext的引用,但效率不高。有许多有效的场景需要从对象本身检索对象的上下文,特别是需要与实体框架模型当前不支持的数据相关操作的扩展方法。 – 2011-04-19 01:49:46