私は同じ問題を抱えています。新しいオブジェクトを挿入しようとすると、EFはいくつかのプロパティに対してnull値を挿入し、挿入が失敗します。Entity Framework - 新しいオブジェクトを作成するときにnull値を挿入しようとしています
まず、DBの構造について説明します。そのイベント管理システムでは、各イベントを練習グループに関連付ける必要があり、キャッシュテーブルに格納されますが最終的にActive Directoryからフェッチされます。私は手動で結合テーブルを作成しました - それは問題ですか?とにかく、EventにはEventPracticeGroupを指す外部キーがあります。外部キーはPracticeGroupCacheを指しています。 PracticeGroupCacheには、Regionsテーブルを指すRegionIdもあります。
新しいEventPracticeGroupオブジェクトを挿入しようとすると問題が発生します。以下は、私が現在使用しているコードは次のとおりです。
とにかくvar eventPracticeGroup = new EventPracticeGroup();
if (TryUpdateModel<EventPracticeGroup>(eventPracticeGroup))
{
/*
var eventId = EventScheduleRepository.GetById(Convert.ToInt32(Request.QueryString["EventScheduleId"])).EventId;
eventPracticeGroup.Event = EventRepository.GetById(eventId);
eventPracticeGroup.PracticeGroupCache = PracticeGroupCacheRepository.GetById(eventPracticeGroup.PracticeGroupCacheId);
eventPracticeGroup.PracticeGroupCache.Region = RegionRepository.GetById(eventPracticeGroup.PracticeGroupCache.RegionId);
EventPracticeGroupRepository.Add(eventPracticeGroup);
*/
var eventId = EventScheduleRepository.GetById(Convert.ToInt32(Request.QueryString["EventScheduleId"])).EventId;
var theEvent = new Event() { Id = eventId };
EventRepository.Repository.UnitOfWork.Context.AttachTo("Events",theEvent);
var practiceGroupCache = new PracticeGroupCache() { Id = eventPracticeGroup.PracticeGroupCacheId };
practiceGroupCache.Region = new Region() { Id = eventPracticeGroup.PracticeGroupCache.RegionId };
eventPracticeGroup.PracticeGroupCache = practiceGroupCache;
EventPracticeGroupRepository.Add(eventPracticeGroup);
EventPracticeGroupRepository.Save();
return RedirectToAction("Index");
}
...あなたが見ることができるように、私はちょうどスタブオブジェクト(ヘルプなし)を使用して試した、と私はまた、実際にフェッチして設定しようとしましたオブジェクト。私が得るエラーは次のとおりです。
テーブル 'XXXX.dbo.Regions'の 'Name'列に値NULLを挿入できません。列はNULLを許可しません。 INSERTは失敗します。ステートメントは終了されました。
明らかに名前はキーフィールドではありません。私はEDMX XMLをチェックしました.Id(プライマリキー列)のみStoreGeneratedPatternをIdentityに設定しました。これはint32 ID列です。 StoreGeneratedPatternが単一の外部キーでidentityに設定されているわけではありません。
nullを許可するようにRegions.Nameを設定した場合、PracticeGroupCaches.Descriptionは同じエラーをスローします。リンクされたオブジェクトはすべてnullに設定されているようです。私はデバッガで一見を持っていましたが、現在コメントされているコードを使用したとき、何もnullではなく、すべてが値を持っていました。私はRegionRepositoryを持っていて、すべての地域を返すだけで、どこか1つがnullの名前を持っているかどうかを調べることができます。誰もしなかった。私のテストDBには2つしかありません。私たちのオブジェクトコンテキストは、HTTPリクエストごとに共有されます。
誰でも助けてください。この時点で、私はそれが働く限り、最も厄介な回避策を使用して解決します。
よろしく、 ジョナサン。
私がしました - 解決策はここにあります:http://stackoverflow.com/questions/2550231/mvc-2-entity-framework-view-model-insert。私はnullを挿入しようとしなかった、その点thats。 – user846091