首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导航属性和查找实体

导航属性和查找实体
EN

Stack Overflow用户
提问于 2014-08-17 10:49:05
回答 1查看 288关注 0票数 0

我有一个Code First实体,如下所示:

代码语言:javascript
复制
public class Account
{
    public Guid Id { get; set; }

    public int AccountTypeId { get; set; }

    [ForeignKey("AccountTypeId")]
    public virtual AccountType AccountType { get; set; }
}

AccountType是一个被视为只读的查找表。我们永远不会想要修改它。

当我查询一个帐户时,AccountTypeIdAccountType都填充了数据库中的正确值。但是,当更新这些属性中的任何一个时,另一个属性直到我们调用SaveChanges()访问服务器时才会更新。我们不希望早期访问服务器来保存内容,而且对于实体的一些单元测试,我们不能依赖于对dbContext.SaveChanges()方法的调用,所以我们覆盖了导航属性,以从离线集合中获取它的值,如下所示:

代码语言:javascript
复制
public class Account
{
    public Guid Id { get; set; }

    public int AccountTypeId { get; set; }

    [ForeignKey("AccountTypeId")]
    public virtual AccountType AccountType
    {
        get
        {
            return AccountTypeCollection.GetById(this.FormatTypeId);
        }
        set
        {
            this.AccountTypeId = (value ?? AccountTypeCollection.None).Id;
        }
    }
}

这样,我们仍然可以在执行连接的LINQ查询中使用AccountType导航属性,并确保它始终与AccountTypeId同步。然而,我们发现的问题是,在某些情况下,我们的性能会受到很大影响。例如,当我们从与Account有关系的Transaction实体获得数百个事务,并试图修改一个事务时,EF会尝试将所有数百个帐户记录保存在数据库中,因为它认为它们的AccountType已更改!这一切为什么要发生?我们怎样才能防止它呢?

如果我们取消AccountType与NotMapped的映射,那么这种情况就不会发生。但是不能再参与任何LINQ-to-Entity查询。

我们有没有办法使用离线C#集合中的查找表,并且仍然能够在LINQ- to -Entities中使用它们,而不会出现这些问题?枚举类型限制太多,不能扩展。这样做的正确方法是什么?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-08-17 17:10:51

您可以通过覆盖来取消所有修改后的AccountType

代码语言:javascript
复制
public class YourContext : DbContext
{
    // dbsets

    public override int SaveChanges()
    {
        var entries = ChangeTracker.Entries<AccountType>()
            .Where(at => at.State == EntityState.Modified);
        foreach (var entry in entries)
        {
            entry.State = EntityState.Unchanged;
        }
        return base.SaveChanges();
    }
}

应用程序中所有修改过的AccountType都不会更新到数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25345912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档