为什么当我创建一个新模型并尝试检索其ID时,它总是返回0?

时间:2012-11-29 19:30:52

标签: c# visual-studio entity-framework model

当我创建新模型并尝试检索其 ID 时,它始终返回0.

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

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

1 个答案:

答案 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();