0

当我创建一个新模型并尝试检索它的ID时,它总是返回 0。

这是为什么?将其添加到相应的集合和上下文后,我正在尝试。据我所知,每次创建新模型时,它都会调用数据库并分配一个唯一 ID。

StoreGeneratedPattern值在 Model.edmx 文件中设置为识别

4

1 回答 1

1

之后会得到数字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();
于 2012-11-29T19:35:36.690 回答