保留EF上下文之间的部分属性值

时间:2012-03-15 03:09:55

标签: entity-framework

如果我使用EF创建模型,那么通过创建另一个部分类来扩展它如何在EF上下文之间保留扩展属性值?即。

我有一个映射到数据库表的Stuff实体。我通过创建一个部分类来扩展它:

public partial class Stuff
{
    public int SomeInt { get; set; }
}

然后设置此值并在不同的上下文中调用:

        Guid id = Guid.NewGuid();
        using (var ctx = new EFPrototypeEntities())
        {
            string someData = Guid.NewGuid().ToString("N");
            Stuff newStuff = new Stuff
                {
                    Id = id,
                    SomeDate = DateTime.Now,
                    SomeData = someData,
                    SomeInt = 100
                };
            Console.WriteLine("Added stuff data :" + someData + " with int " + newStuff.SomeInt);
            ctx.AddToStuffs(newStuff);
            ctx.SaveChanges();
        }

        using (var ctx = new EFPrototypeEntities())
        {
            Stuff stuff = ctx.Stuffs.First<Stuff>(s => s.Id == id);
            Console.WriteLine("Got stuff with data : " + stuff.SomeData + " and int " + stuff.SomeInt);
        }

SomeInt在第二个上下文中返回0。如果我只在一个上下文中包装它,它返回100。

1 个答案:

答案 0 :(得分:0)

您必须了解Entity Framework上下文机制。不同的上下文使用不同的内存存储。

当您从第二个上下文获取数据时,它直接从数据库获取数据,因此第一个数据中的数据无法传递到第二个上下文。

根据您的代码结构,有一些解决方案可以解决您的需求:

  1. 如果可以在同一个函数中访问2个上下文,只需从第一个上下文中分离对象并将其附加到第二个

  2. 如果在2个不同的函数/调用中访问2个上下文,那么您可以为整个应用程序使用单个上下文。您可以使用IOC(控制反转)来实现它。一些常见的方法是IOC,Autofac,Microsoft Unity ......