新しいモデルを作成してそのIDを取得しようとすると、常に0が返されます。
何故ですか?対応するセットとコンテキストに追加した後、試しています。私の知る限り、新しいモデルが作成されるたびに、DBが呼び出され、一意のIDが割り当てられます。
StoreGeneratedPattern値は、Model.edmxファイルでIdentifyに設定されています。
新しいモデルを作成してそのIDを取得しようとすると、常に0が返されます。
何故ですか?対応するセットとコンテキストに追加した後、試しています。私の知る限り、新しいモデルが作成されるたびに、DBが呼び出され、一意のIDが割り当てられます。
StoreGeneratedPattern値は、Model.edmxファイルでIdentifyに設定されています。
後に番号を取得し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();