c# – EF代码优先 – 无法更新数据库行

c# – EF代码优先 – 无法更新数据库行,第1张

概述用EF“代码优先”方法尝试了一些代码并遇到了一个奇怪的问题. 我的datacontext: public class BookmarkerDataContext : DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(System 用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函数时,它似乎在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代码优先 – 无法更新数据库行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1216306.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存