正在尝试使用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