当我创建一个新模型并尝试检索它的ID时,它总是返回 0。
这是为什么?将其添加到相应的集合和上下文后,我正在尝试。据我所知,每次创建新模型时,它都会调用数据库并分配一个唯一 ID。
StoreGeneratedPattern值在 Model.edmx 文件中设置为识别。
当我创建一个新模型并尝试检索它的ID时,它总是返回 0。
这是为什么?将其添加到相应的集合和上下文后,我正在尝试。据我所知,每次创建新模型时,它都会调用数据库并分配一个唯一 ID。
StoreGeneratedPattern值在 Model.edmx 文件中设置为识别。
之后会得到数字context.SaveChanges()
。在此之前,数据库中没有新模型对象的记录,并且不知道插入时将生成的 id。
更新:
例如,您有两个表:书籍和书架。任何一本书都可以放在一个书架上,一个书架可以包含许多书。典型的一对多关系。EF 在模型中为您生成两个类: Class Book:
public class Book
{
public int Id{get;set;}
public string Title{get;set;}
....//some other properites
public virtual Shelve Shelve{get;set;} //navigation property to Shelve where this book is placed
}
类搁置:
public class Shelve
{
public int Id{get;set;}
public string Name{get;set}
....//some other properties, as example address in library
public virtual ICollection<Book> Books{get;set;}
}
如果您想创建一本书并将其放在现有的书架中,您应该:
var book = new Book();
//initialize properties of book
var shelve = context.GetShelveById(shelveId); //get existing shelve from database by id
shelve.Books.Add(book);
context.SaveChanges();
如果你想创建新的书架并添加新书,那么你可以使用下一个示例:
var book = new Book();
//initialize properties of book
var shelve = new Shelve();
//initialize properties of Shelve
shelve.Books = new List<Book>();
shelve.Books.Add(book);
context.Add(shelve); //add shelve to context
context.SaveChanges();