尝试保存新数据时出现未处理的异常

时间:2017-12-05 12:36:40

标签: c# sql many-to-many

我正在尝试保存我正在创建的问答项目的更改更改。我无法保存标签,因为只要我查询数据是否已存在,它就会返回异常。

 public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {
        }

    public DbSet<ApplicationUser> ApplicationUsers { get; set; }
    public DbSet<Question> Questions { get; set; }
    public DbSet<Tag> Tags { get; set; }
    public DbSet<QuestionTag> QuestionTags { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<QuestionTag>()
                    .HasKey(t => new { t.QuestionID, t.TagID });

        modelBuilder.Entity<QuestionTag>()
            .HasOne(qt => qt.Question)
            .WithMany(q => q.QuestionTags)
            .HasForeignKey(qt => qt.QuestionID);

        modelBuilder.Entity<QuestionTag>()
            .HasOne(qt => qt.Tag)
            .WithMany(t => t.QuestionTags)
            .HasForeignKey(qt => qt.TagID);
}

以下是我在查询标签是否已存在时用于解析新数据的代码。

public List<QuestionTag> ParseTags(string tags)
        {
            var tagList = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
        var questionTags = new List<QuestionTag>();
        var anyNewTags = false;

        foreach (var tag in tagList)
        {
            var tagExists = _context.Tags.Where(x => x.Name == tag)
                .Select(x => new QuestionTag { Tag = new Tag { Name = x.Name } })
                .FirstOrDefault();

            if (tagExists == null)
            {
                var newTag = new QuestionTag() { Tag = new Tag() { Name = tag } };
                _context.QuestionTags.Add(newTag);
                questionTags.Add(newTag);

                anyNewTags = true;
            }else
            {

                questionTags.Add(tagExists);
            }

        }
            if (anyNewTags) _context.SaveChanges();
        return questionTags;
    }

但是,当我尝试解析新标记时,我得到此错误: InvalidOperationException:属性&#39; QuestionID&#39;在实体类型&#39; QuestionTag&#39;有暂时的价值。可以显式设置永久值,也可以确保将数据库配置为为此属性生成值。

1 个答案:

答案 0 :(得分:1)

该错误指示您应设置QuestionID属性以与Question实体建立协作。因此,请尝试将值设置为QuestionId属性。

var newTag = new QuestionTag() { Tag = new Tag() { Name = tag }, QuestionId = questionId };
_context.QuestionTags.Add(newTag);

注意:我写了questionId变量来做一个例子。您应该使用ID Question实体的相关input1 = browser.find_element_by_xpath('//*[@id="login-dialog dialog"]/div[2]/div[2]/div[2]/form/div[1]/input') actions = ActionChains(driver) actions.move_to_element(input1).send_keys("myusername").perform() 进行设置。