我正在尝试保存我正在创建的问答项目的更改更改。我无法保存标签,因为只要我查询数据是否已存在,它就会返回异常。
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;有暂时的价值。可以显式设置永久值,也可以确保将数据库配置为为此属性生成值。
答案 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()
进行设置。