当我创建新模型并尝试检索其 ID 时,它始终返回0.
为什么?我在将它添加到相应的集合和上下文后尝试它。据我所知,每次创建新模型时,它都会调用数据库并分配一个唯一的ID。
StoreGeneratedPattern 值在Model.edmx文件中设置为标识。
答案 0 :(得分:1)
它会在context.SaveChanges()
之后得到数字。在它之前,db中没有新模型对象的记录,并且不知道将在插入时生成的id。
<强>更新强>:
例如,您有两个表:书籍和书架。任何书都可以放在一个书架上,一个书架可以容纳很多书。典型的一对多关系。 EF在模型中为您生成两个类: 课程书:
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();