正在嘗試使用EF「代碼優先」方法執行某些代碼,並遇到一個奇怪的問題。EF代碼優先 - 無法更新數據庫行
我的DataContext:
public class BookmarkerDataContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasKey(u => u.UserId);
base.OnModelCreating(modelBuilder);
}
}
當用戶對象是:
public class User
{
public long UserId { get; set; }
public ICollection<Tag> Tags { get; set; }
}
在我的代碼我做的相當簡單的事情:
public void UpdateUserTags(User user,ICollection<Tag> taglist)
{
user.Tags = new List<Tag>(user.Tags.Union(taglist));
datacontext.Users.Add(user);
datacontext.SaveChanges();
}
用戶對象我傳遞到這個功能是類似的結果:
datacontext.Users.SingleOrDefault(u => u.UserId==id)
每次我調用UpdateUserTags函數時,它似乎都會在用戶表中創建一個新行,而不是更新它。我在這裏做錯了什麼?
'virtual'無關與延遲加載。當您想要更改跟蹤時,「虛擬」與EF相關(EF將創建一個代理類,覆蓋所有成員)。 – RPM1984 2010-11-03 22:34:33
你說得對,那是我的壞事,過了漫長的一天。謝謝你指出我的錯誤;) – PsychoCoder 2010-11-04 01:30:12