是否有更好的方法从DBContext修改的条目重建实体类

时间:2014-06-24 01:42:03

标签: c# entity-framework

目前我正在使用以下代码从DBContext修改的条目

重构实体

假设我的实体类是

public partial class JournalEntryCode : IAuditColumns
{
    public JournalEntryCode()
    {
        this.JournalEntries = new HashSet<JournalEntry>();
    }

    public int journal_entry_code_pk { get; set; }
    public string journal_entry_code { get; set; }
    public System.DateTime tstamp { get; set; }

    public virtual ICollection<JournalEntry> JournalEntries { get; set; }
}

目前我通过以下例程来实现这个问题的解决方案(并且它有效)但我必须相信有更优雅的方法来做到这一点......

    private List<JournalEntryCode> GetListModifedEntities()
    {
        List<JournalEntryCode> listJournalEntryCodes = new List<JournalEntryCode>();
        var changeInfo = Context.ChangeTracker.Entries()
                            .Where(t => t.State == EntityState.Modified)
                            .Select(t => new
                             {
                                Current = t.CurrentValues.PropertyNames.ToDictionary(pn => pn, pn => t.CurrentValues[pn]),
                             });
        foreach (var change in changeInfo)
        {
            JournalEntryCode jec = new JournalEntryCode();
            foreach (var pair in change.Current)
            {
                switch (pair.Key)
                {
                    case "journal_entry_code_pk":
                        jec.journal_entry_code_pk = (int)pair.Value;
                        break;
                    case "journal_entry_code":
                        jec.journal_entry_code = (string)pair.Value;
                        break;                       
                    case "tstamp":
                        jec.tstamp = (DateTime)pair.Value;
                        break;                        
                }
            }
            listJournalEntryCodes.Add(jec);
        }
        return listJournalEntryCodes;
    }

1 个答案:

答案 0 :(得分:0)

DbPropertyValues有一个方法ToObject,您可以用它来创建一个新的分离对象,例如实体的当前值:

return Context.ChangeTracker.Entries<JournalEntryCode>()
              .Where(e => e.State == EntityState.Modified)
              .Select(e => e.CurrentValues.ToObject())
              .Cast<JournalEntryCode>()
              .ToList();