【发布时间】:2014-04-02 22:15:57
【问题描述】:
我有两个表:Word 和 Adjective,都有一些属性。两个表的主键是ID,Adjective.ID 还引用Word.ID 作为外键,所以是1-1 关系。
我还有一个存储库,用于存储任何类型的具有更新功能的表。
public void Update(T entity) {
var entry = DatabaseContext.Entry(entity);
DatabaseSet.Attach(entity);
entry.State = EntityState.Modified;
}
我从数据库中取出一个值,将它转换成一个看起来像这样的 ViewModel(当然它实际上要复杂一点):
public class WordModel {
public int ID { get; set; }
public string OriginalWord { get; set; }
}
public class AdjectiveModel : WordModel {
public string Translation { get; set; }
}
然后我更改属性 Word 和 Translation 的值,将其转换并写回。转换后我有一个这样的对象:
Word = {
ID = 1
OriginalWord = y
Adjective = {
ID = 1
Translation = z
}
}
然而,在更新时,只有一个表被更新。
Database.Words.Update(Word)只更新Word表中的OriginalWord值,
Database.Adjectives.Update(Word.Adjective) 只更新形容词表中的翻译值。
按顺序运行两个表的更新时,我得到一个 InvalidOperationException:ObjectStateManager 中已经存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象。
创建一个新的数据库条目效果很好。
我不敢相信我必须自己更新两个表,然后为每个表保存上下文。我通过一个教程创建了数据库存储库,该教程显然没有很好地解释 DbSet 和 DbContext 发生了什么,这让我在这里有点无助。 遗憾的是我没有链接(很久以前我创建了数据库项目)
那么,我在这里做错了什么?
【问题讨论】:
标签: database entity-framework repository