1

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

Bar 的设置器中有没有办法进入实体框架上下文?

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

}
4

2 回答 2

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;
于 2012-11-19T20:46:05.783 回答
1

听起来很糟糕。我不知道您的应用程序是如何构建的,但是在客户端(应该有对模型的引用,您不应该有对数据访问层(位于服务器中)的引用,也不应该对 System.Data 有引用。因此,您不能在不破坏整个应用程序结构的情况下在其中添加引用 EF 上下文的代码。

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

于 2012-11-19T21:01:48.260 回答