如果我使用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。
答案 0 :(得分:0)
您必须了解Entity Framework上下文机制。不同的上下文使用不同的内存存储。
当您从第二个上下文获取数据时,它直接从数据库获取数据,因此第一个数据中的数据无法传递到第二个上下文。
根据您的代码结构,有一些解决方案可以解决您的需求:
如果可以在同一个函数中访问2个上下文,只需从第一个上下文中分离对象并将其附加到第二个
如果在2个不同的函数/调用中访问2个上下文,那么您可以为整个应用程序使用单个上下文。您可以使用IOC(控制反转)来实现它。一些常见的方法是IOC,Autofac,Microsoft Unity ......