如何从属性设置器访问实体框架实体的上下文?

时间:2012-11-19 20:31:05

标签: c# entity-framework-4

假设我有一个名为Foo的实体框架实体,而在Foo中有一个名为Bar的属性。

在Bar的setter中有没有办法进入实体框架上下文?

public partial class Foo : IObjectWithChangeTracker
{
    public string Bar
    {
        get { /* ... */ }
        set
        {
            // How do I get the entity context here?
        }
    }

}

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,我这样做的方法是向Bar添加不在数据协定下的属性,然后编写另一个方法来检索另一个对象并在那里设置Bars属性。但是,由于HighCore说的原因,我可能不理解你的问题。整个想法对我来说没有意义;对象不拥有上下文。

if (context.OtherObjectTable != null)
        {
            var otherObj = (from obj
                           in context.OtherObjectTable
                           where obj.Name == "Name/key for obj"
                           select obj).FirstOrDefault(); // ensures we only get one back

如果您按主键搜索,则只需删除FirstOrDefault()即可。如果您可以返回多个结果,则创建另一个循环,您可以迭代otherObj(现在可能是列表)并过滤下一个标识属性。在该循环之后,您可以像

那样进行正常分配
    Bar.Count = (int)otherObj.SomeInt32;

答案 1 :(得分:1)

听起来不错。我不知道你的应用程序是如何构建的,但是在客户端(应该引用模型,你不应该引用数据访问层(位于服务器中),也不应该引用System.Data。所以你不能在引用EF上下文的地方添加代码,而不会破坏整个应用程序结构。

我建议在实体中添加某种静态委托,例如Action<Foo> OnBarChanged并在setter中调用,然后在服务器端,在某些初始化代码中,将静态委托设置为某些代码您实际上可以访问所需的一切。