我試圖將一個對象保存到我的數據庫,但由於上述指定的異常消息我無法保存。將對象保存到數據庫結果中:「一個實體對象不能被IEntityChangeTracker的多個實例引用」
下面是我在做什麼:
Player player = playerRepository.Find(universeId, playerId);
UserProperties userProperties = userPropertiesRepository.Find(User.Identity.GetUserId());
rated = new Ratings
{
Player = player,
RatingType = ratingsIdentifier,
UserProperties = userProperties
};
ratingsRepository.InsertOrUpdate(rated);
的InsertOrUpdate()
(和Save()
)方法:
public void InsertOrUpdate(Ratings ratings)
{
if (ratings.RatingsId == default(int))
{
// New entity
context.Ratings.Add(ratings); // this is where the exception happens
}
else
{
// Existing entity
context.Entry(ratings).State = EntityState.Modified;
}
Save();
}
public void Save()
{
context.SaveChanges();
}
我有這個問題的一個基本的瞭解,我只是不」不知道如何解決它。我可以告訴它它與Player
和UserProperties
對象有關,因爲如果它們爲空,那麼當我嘗試保存時它不會自行消失。
我的上下文類:
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public DbSet<Player> Players { get; set; }
public DbSet<ServerData> ServerDatas { get; set; }
public DbSet<Ratings> Ratings { get; set; }
public DbSet<UserProperties> UserProperties { get; set; }
// some more DbSet<>
}
我試圖閱讀關於這個的其他主題,但我不能,例如,detach()
上IdentityDbContext
。我在這裏完全不知所措。
您的'userPropertiesRepository'是否使用與'playerRepository'相同的上下文實例? – DavidG
每個存儲庫都有一行'private readonly ApplicationDbContext context = new ApplicationDbContext();'在頂部。這正是MvcScaffold的腳手架。 – MrGraversen
您需要有一個上下文才能同時使用這兩個存儲庫。 – DavidG