1

私は 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();

条件を消去すると、とにかく失敗します。問題は、サブスクライバーにユーザーをロードするときです。サブスクライバーのみをロードすると、コミットが機能します。

ありがとう!

4

0 に答える 0