0

新しいモデルを作成してそのIDを取得しようとすると、常に0が返されます。

何故ですか?対応するセットとコンテキストに追加した後、試しています。私の知る限り、新しいモデルが作成されるたびに、DBが呼び出され、一意のIDが割り当てられます。

StoreGeneratedPattern値は、Model.edmxファイルでIdentifyに設定されています。

4

1 に答える 1

1

後に番号を取得しcontext.SaveChanges()ます。それ以前は、新しいモデルオブジェクトのレコードがdbになく、挿入時に生成されるIDがわかりません。

更新

例として、BooksとShelvesの2つのテーブルがあります。どの本も1つの棚に置くことができ、1つの棚には多くの本を入れることができます。典型的な1対多の関係。EFは、モデル内に2つのクラスを生成します。 クラスブック

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 に答える