2

既存のエンティティを更新しようとしています

private void UpdateEfItem(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 item)
{
    itemFromDb.UpdatedDate = DateTime.Now;
    itemFromDb.Description = item.Description;


   //references
   itemFromDb.MamConfigurationToBrowser_V1 = item.MamConfigurationToBrowser_V1;
   itemFromDb.MamConfigurationToGroups_V1 = item.MamConfigurationToGroups_V1;
}

Ui-Item を Ef-item に割り当てると、次のエラーが発生します。

itemFromDb.MamConfigurationToBrowser_V1 = item.MamConfigurationToBrowser_V1;

EntityCollectionすでに初期化されています。この InitializeRelatedCollectionメソッドはEntityCollection、オブジェクト グラフの逆シリアル化中に new を初期化するためにのみ呼び出す必要があります。

アップデート:

私は@Gertの方法を試しました:

    private void UpdateEfItem(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 item)
    {
        itemFromDb.UpdatedDate = DateTime.Now;

        itemFromDb.Description = item.Description;

        itemFromDb.StatusId = item.StatusId;

        itemFromDb.Name = item.Name;

        itemFromDb.NumericTraffic = item.NumericTraffic;

        itemFromDb.PercentageTraffic = item.PercentageTraffic;

        itemFromDb.Type = item.NumericTraffic;



        itemFromDb.MamConfigurationToBrowser_V1.Clear();

        for (int i = 0; i < item.MamConfigurationToBrowser_V1.Count; i++)
        {
            var elementToAdd = item.MamConfigurationToBrowser_V1.ElementAt(i);

            elementToAdd.Browser = mMaMDBEntities.Browsers.Single(browserItem => browserItem.BrowserID == elementToAdd.BrowserID);

            elementToAdd.MamConfiguration_V1 = itemFromDb;

            itemFromDb.MamConfigurationToBrowser_V1.Add(elementToAdd);
        }

次のエラーが表示されます。

clearおよびaddコマンドを追加する場合のみ

操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。

4

2 に答える 2

0

発生している可能性があるのは、SignalData がループ中にサブスクライバー ディクショナリを間接的に変更し、そのメッセージにつながっていることです。変更することでこれを確認できます

これを試して

 itemFromDb.MamConfigurationToBrowser_V1.Clear();

 foreach (var item in item.MamConfigurationToBrowser_V1.ToList()) //.ToList()
 {
    itemFromDb.MamConfigurationToBrowser_V1.Add(item);
 }
于 2016-05-14T05:59:02.043 に答える
0

試す:

itemFromDb.MamConfigurationToBrowser_V1.Clear();

foreach (var item in item.MamConfigurationToBrowser_V1)
{
     itemFromDb.MamConfigurationToBrowser_V1.Add(item);
}
于 2013-04-21T08:15:35.543 に答える