0

データベースのテーブル MyModel に行を追加し、その新しい行に関する通知を別のテーブルに作成しています。通知を適切に作成するには、新しく作成された MyModel 行の ID が必要です。

これは私のコントローラからの私のコードです:

MyModel newMyModel = new MyModel
{
    Title = appliedCourse.Title,
};
db.MyModel.Add();

// I need code here that finds the MyModel.ID - but I do not know how to search for this MyModel 
// because MyModel.Title is not necessarily unique - the only necessarily unique piece of data 
// would be the MyModel.ID
new MyModel MyModelWithId = db.MyModel.Find(MyModel) // <- that does not work

Notification newNotification = new Notification
{
    Time = DateTime.Now,
    Link = Url.Action("Details", "MyModel", newMyModelWithId.MyModelID),
    ViewableBy = "Admin",
    Complete = false
};
db.Notification.Add(newNotification);
db.SaveChanges();

新しく作成された MyModel の ID を取得する方法はありますか?

「最大の ID 値」を検索して返すことも考えられますが、それが最も効果的な方法かどうかはわかりません。

ID は必要なときに作成されますか、それとも db.SaveChanges(); を実行する必要がありますか? 探す前に電話?

データベースにクエリを実行してその ID を取得できるように、MyModel に一意の値を追加する必要がありますか? (ID は、将来のクエリで既に独自の値になっていますが) DateTimeCreated 値を考えていたので、次のように検索します。

new MyModel MyModelWithId = db.MyModel.FirstOrDefault(
                o => o.TimeDateCreated == MyModel.TimeDateCreated);

DateTime メソッドが非常に効率的かどうかもわかりません。

4

2 に答える 2

2

変更を保存するまで、行の ID は取得されません。

あなたの例では、SaveChanges を 2 回押す必要があります。MyModel を保存して ID を生成したら、URL.Action で newNotification を保存します。

MyModel newMyModel = new MyModel
{
    Title = appliedCourse.Title,
};
db.MyModel.Add();

// Save first, let the DB generate the ID.  
// The DB generated ID will automatically load into the object you just saved.
db.SaveChanges(); 

Notification newNotification = new Notification
{
    Time = DateTime.Now,
    Link = Url.Action("Details", "MyModel",new { id = newMyModel.ID }),
    ViewableBy = "Admin",
    Complete = false
};
db.Notification.Add(newNotification);
db.SaveChanges();

本当にやむを得ない理由がない限り、モデル自体の一部としてではなく、新しい通知が表示されているときに Url.Action を生成することがあります。代わりに、参照を保持して、一度だけ保存することができます。そうは言っても、それはユースケースを知らずに大まかな推測です。

于 2012-05-04T12:19:19.690 に答える
0

MyModel にNotificationsプロパティがある場合、または Notification にプロパティがある場合MyModel(ナビゲーション プロパティEF4 コード ファースト: ナビゲーション プロパティを追加せずに関係を追加する方法)、オブジェクト参照を設定することで、それらの間のリンクを設定できます。次に、 を呼び出すとdb.SaveChanges()、ID が正しく設定されます。ID を別の方法で使用したいため、この場合はうまくいかないようです。

于 2012-05-04T14:31:37.387 に答える