- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉我的英语不好 - 我在 WPF (.net 4.5) 应用程序中使用 EF 5 (Code First)。每个窗口都有自己的上下文。
我有一个这样的模型(为简洁起见省略了代码):
public class Car
{
public string Model { get; set; }
public int BrandId { get; set; }
public virtual Brand Brand { get; set; }
}
我使用组合框允许用户关联 Brand
到 Car
.问题是,每次我保存 Car
,一个新的,重复的Brand
也得救了。发生这种情况是因为我用 AsNoTracking()
加载了组合框.
现在,我用 AsNoTracking()
加载组合框因为我在 Brand
上加载更改时遇到问题在其他 DbContext 实例中创建的表(使用 myContext.Set<Brand>().Load()
)。
所以我的问题是,如何解决这个问题?如果有另一种方法可以强制重新加载集合(不使用 AsNoTracking
),那就太好了。更好的是能够通知 EF AsNoTracking
加载的实体不是新的。
编辑 1:@标记:谢谢,将实体附加到上下文就可以了。但是我使用了一个通用基类来进行验证并保存我所有表单的数据,因此手动附加实体不是很实用......根据你的建议我最终这样做了,在添加 Car 实体之后并在保存它之前:
var entities = (((IObjectContextAdapter)ctx).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added));
foreach (var item in entities)
{
if ((item.Entity as EntityBase).Id > 0)
{
item.ObjectStateManager.ChangeObjectState(item.Entity, EntityState.Unchanged);
}
}
(我所有的实体都继承自 EntityBase,我所有的 key 都是数据库生成的)。这很好用,但我想听取第二意见...这样好还是有更简单的方法?
最佳答案
发生的事情是您的上下文不知道附加到汽车的品牌,因此它正在创建一个新品牌来匹配您的外键。在保存之前,您应该将品牌附加到上下文中:
context.Brands.Attach(brand);
您可以通过单独重新加载来在保存之前重新加载单个品牌:
db.Entry(brand).Reload();
如果您不想在保存汽车时实际保留对 Brand 的任何更改,您可以告知上下文 Brand 未更改,并阻止更新。
context.Entry(brand).State = EntityState.Unchanged;
关于entity-framework - AsNoTracking 复制实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12185139/
本来我也这么认为 context.Configuration.AutoDetectChangesEnabled = false; 将禁用更改跟踪。但不是。目前,我需要在所有 LINQ 查询(对于我的只
我正在尝试使用这段代码从数据库中删除一行 public ListPicture GetPicture(string Id) { ListPicture pic = Pictures.AsNoTra
我正在处理一个大型项目(有许多不同的厨师制作汤,多年来过去了)并且刚刚发现了以下代码。 private IEnumerable SomeSome() { using(DataModel conte
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我有一个 Linq 查询来获取一个实体及其一些导航属性。 context.MyEntity .AsNoTracking() .Include(i=> i.Nav1) .Incl
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我需要来 self 的数据库的未经编辑的项目列表。它运行缓慢,所以我试图加快速度。 所以我将 AsNoTracking 添加到 LINQ 查询中,它运行得更慢了! 以下代码平均耗时 7.43 秒。 A
我正在将查询从 Linq-to-Sql 迁移到 EF。为了使禁用跟踪更难忘记,在 Linq-To-Sql 中,我编写了一个 ConfigureForQuery 包装函数,它只是将 ObjectTrac
抱歉我的英语不好 - 我在 WPF (.net 4.5) 应用程序中使用 EF 5 (Code First)。每个窗口都有自己的上下文。 我有一个这样的模型(为简洁起见省略了代码): public c
我想知道 Entity Framework 是否可以实现以下场景: 我想用选项 AsNoTracking 加载几个表,因为它们都像用户无法更改的静态表。 那些表也恰好是其他人的导航属性。到目前为止,我
所以我已经阅读了很多关于在 EF 中执行查询时使用 AsNoTracking() 的内容,特别是如果它返回实体,以便在您不更新时不要保留对事物的引用。 但我还读到 AsNoTracking 本身也可以
我有这样的实现: var query = this.DbContext.Set(); if (includeProperties != null && includeProperties.Any())
下面是我从数据库中获取信息的查询。从性能的角度来看,我想使用 AsNoTracking我的实体上的方法。 var teamrole = (from role in _context.USERROLEs
我已经设置了模拟数据库集,它读取一堆 json 文件并将它们反序列化为模拟数据库集。我将 AsNoTracking 添加到我的变量中有两个原因:1) 我将在数据库中存储一个新对象,并且不需要在更新条目
我有一个从大部分只读数据库中提取的 EF5 Code First 项目,因此我对绝大多数查询使用 .AsNoTracking() 以提高性能。 不过我很好奇:我有许多导航属性,有时了解它们是否已经加载
我有兴趣在我的 LINQ 选择查询中使用 AsNoTracking 来提高性能。我将 Entity Framework 5 与 Code First 结合使用。 但是,我的所有查询都是使用 LINQ
如何在查询 EF 上下文时将 Find() 与 AsNoTracking() 结合使用,以防止跟踪返回的对象。这是我做不到的 _context.Set().AsNoTracking().Find(i
我注意到可以通过三种不同的方式禁用跟踪: 通过上下文属性上的 AsNoTracking 在执行最终查询之前通过 AsNoTracking 通过 context.ChangeTracker.QueryT
在下面的片段中,我尝试使用 Anonymous Projection 获取数据,我不想跟踪获取的 entities。 注意:我已经解决了现有的堆栈问题,但无法为我找到有效的解决方案 using (va
我们目前正在为 Entity Framework 使用延迟加载并遇到内存不足异常。我们遇到此异常的原因是因为 Linq 查询加载了大量数据,并且在后期使用延迟加载来加载导航属性。但是因为我们不使用 N
我是一名优秀的程序员,十分优秀!