私は Entity Framework を使用しており、DB の構造は次のようなものです。
ユーザーはサブスクライバーのコレクションを持っているので...
サブスクライバー: 名前 UserId ユーザー (ユーザー オブジェクトをナビゲートするため)
ユーザーなしでサブスクライバーを取得した場合、「名前」を変更して変更をコミットするとすべて正常に動作しますが、ユーザーがインスタンス化されたサブスクライバーを取得すると、CommitAndRefreshChanges でスローされます: オブジェクトに重複するキー行を挿入できません '一意のインデックス 'PK_Email' を持つ dbo.User'.\r\nステートメントは終了しました
しかし、私はユーザーのために何も変更しません...何が間違っていますか?
サブスクライバーを取得するには、リポジトリで実行します。
RegistrationModuleDataModelContainer context = UnitOfWork as RegistrationModuleDataModelContainer;
Subscriber subscriber = (from s in context.Subscribers.Include(it=>it.User)
where s.IdSubscriber == idSubscriber
select s).FirstOrDefault();
データを変更するには、次のコードを使用します。
Subscriber subscriber = this.GetSubscriberWithUser(idSubscriber);
subscriber.FirstName = FirstName;
subscriber.LastName = LastName;
//Condition with subscriber.User.x
subscriber.Email = Email;
_subscriberRepository.Modify(subscriber);
IUnitOfWork unitOfWork = _subscriberRepository.UnitOfWork;
unitOfWork.CommitAndRefreshChanges();
条件を消去すると、とにかく失敗します。問題は、サブスクライバーにユーザーをロードするときです。サブスクライバーのみをロードすると、コミットが機能します。
ありがとう!