2016-03-08 15 views
1

这是EF 7(现在是Core)。我有一个名为CreatedBy的影子属性。 EF正确地从数据存储装载它的值,只要我使用相同的DbContext实例,该属性的值仍可访问,但我需要以分离方式工作,并稍后使用另一个DbContext实例提交更改。实体框架问题7影子属性

问题是,对于后续的DbContexts,所有阴影属性都是NULL,到目前为止我还是看不到它来加载它。所以在摆脱这个阴影之前,我需要知道是否有人已经找到了解决这个问题的解决方案。

如果它可以帮助,这里是如何与这里出发:

var cached = Cache.Get<MyType>(); 
cached.Default = false; //some updating 
var dbContext = new MyContext(); 
dbContext.Attach(cached); 
dbContext.Entry(cached).State = EntityState.Modified; 
dbContext.SaveChanges(); 

的SaveChanges为阴影属性提交NULL值。

+1

看起来像影子属性迫使你从数据库中获取实体,并用断开客户端的数据“重新绘制状态”。 –

+0

@GertArnold似乎是这样的,AFAIK这个特性是为了映射和抽象RowVersion,CreatedBy,CreatedDate等列的实体而创建的。这种行为使得imho变得无用。 –

+0

我同意你的意见。当我第一次听到它时,我想知道:我们是否要求这个?什么是商业价值?该功能的状态是令人失望的。 –

回答

0

您需要将缓存的对象直接附加到它所属的表/对象,而不是直接附加到上下文。例如:

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; 

using (var context = new BloggingContext()) 
{ 
    context.Blogs.Attach(existingBlog); 
    context.Entry(existingBlog).State = EntityState.Modified; 
    context.SaveChanges(); 
} 

您正在执行context.Attach(),这不起作用。去这里,https://msdn.microsoft.com/en-us/data/jj592676.aspx,了解更多信息。

+0

谢谢Ben,不幸的是这不适用于EF 7阴影属性。 –