我有一个“ AddBookForm”,它将“作者”作为参数。打开表单后,我输入书名,然后将书与作者作为关系保存。 问题是,当我保存这本书时,我也可以在数据库中找到一个新的作者条目,并且该书与该新条目相关。
作为示例:我有一个ID为6且名称为“ Franz Kafka”的作者,并将该作者对象作为参数添加到我的AddBookForm中。我输入一个标题并单击“保存”,然后在数据库中找到一个具有连续编号7且具有相同名称的新作者,而我刚添加的书与ID 7而不是6有关。
class Book
{
public int Id { get; set; }
public Author Author { get; set; }
public string Title { get; set; }
}
using (AddBookForm frm = new AddBookForm(author))
{
frm.ShowDialog();
}
public partial class AddBookForm: Form
{
Author author;
public AddBookForm(Author author)
{
InitializeComponent();
this.author = author;
}
private void button1_Click(object sender, EventArgs e)
{
using (MyDbContext db = new MyDbContext())
{
Book book = new Book();
book.Title = textBox1.Text;
book.Author = this.author;
db.Books.Add(book);
db.SaveChanges();
this.Close();
}
}
}
答案 0 :(得分:1)
数据库中的所有属性都应来自相同的DbContext。您的Author属性来自与单击按钮不同的DbContext,因此EF将自动创建一个新的DbContext。
尝试一下:
using (MyDbContext db = new MyDbContext())
{
Book book = new Book();
book.Title = textBox1.Text;
book.Author = db.Find(this.author.Id);
db.Books.Add(book);
db.SaveChanges();
this.Close();
}
这将在与新书相同的上下文中检索作者,因此不会创建新记录。