
我的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函数时,它似乎在User表中创建一个新的Row而不是更新它.我在这里做错了吗?
解决方法 @Donald是正确的,你需要在进行更新时附加到ObjectContext.但是,仅当您的实体已分离时才会这样.
如果您已经从图表中检索到单个实体,
var user = datacontext.Users.SingleOrDefault(u => u.UserID==ID);
这意味着您不需要附加或再次获取它.这样做:
var user = datacontext.Users.SingleOrDefault(u => u.UserID==ID);user.Tags = new List<Tag>(user.Tags.Union(tagList));context.SaveChanges();
但是,我不建议替换整个Tags集合,添加标签:
user.Tags.Add(soMetag);
HTH
总结以上是内存溢出为你收集整理的c# – EF代码优先 – 无法更新数据库行全部内容,希望文章能够帮你解决c# – EF代码优先 – 无法更新数据库行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)