最初にいくつかの背景情報:
wcf soap サービスを提供するサーバーと、それらのサービスを利用する Web サイトがあります。サーバーはエンティティ フレームワークを使用して、データベースへの書き込み/データベースからの読み取りを行います。プロセス中に、エンティティ オブジェクトは DTO に変換され、サーバーに戻ると元に戻ります。
私は次のエンティティモデルを持っています:
DTO は自動生成されます。
今問題に:
は、 a 、 a 、 a 、および twoParticipent
で作成される「開始」オブジェクトです。それらが作成された後、既に作成された と を追加したいと思います。VisibleStatus
Status
StatusMessage
ContactGroups
Contact
Participent
ContactGroup
ここでの問題は、エンティティ フレームワークが、参加者と連絡先グループが既にデータベースに存在していることを認識せず、それらの新しいデータベース エントリを作成することです。すでにIDを持っている場合でも。問題は、エンティティが DTO に変換され、元に戻されるという事実にあると思います。
参加者、可視ステータス、ステータス、ステータス メッセージ、および連絡先グループを生成する次のクライアント側コードを想定します。
MT_Stammdaten_MeineKontakte_ParticipentDTO user = new MT_Stammdaten_MeineKontakte_ParticipentDTO();
user.MT_Participant_Id = endUserId;
user.StatusMessage = new StatusMessageDTO()
{
Text = "not defined",
Timestamp = DateTime.Now,
};
user.VisibleStatus = new VisibleStatusDTO()
{
Photo = null,
Status = new StatusDTO()
{
Value = "not defined"
},
Timestamp = DateTime.Now
};
user = cClient.AddParticipantMapping(user);
ContactGroupDTO defaultGroup = new ContactGroupDTO()
{
Name = CONTACTS_GROUP_STANDARD,
Description = CONTACTS_GROUP_STANDARD_DESC,
Participent = user,
};
ContactGroupDTO familyGroup = new ContactGroupDTO()
{
Name = CONTACTS_GROUP_FAMILY,
Description = CONTACTS_GROUP_FAMILY_DESC,
Participent = user,
};
defaultGroup = cClient.AddContactGroup(defaultGroup);
familyGroup = cClient.AddContactGroup(familyGroup);
そして今、連絡先を作成するためのコード:
MT_Stammdaten_MeineKontakte_ParticipentDTO participent = cClient.getUser(endUserId);
ContactGroupDTO group = cClient.GetContactGroup(1);
MT_Stammdaten_MeineKontakte_EndUser endUser = new MT_Stammdaten_MeineKontakte_EndUser()
{
MT_EndUser_Id = newContactId,
};
ContactDTO contact = new ContactDTO()
{
ContactGroup = group,
ContactGroupId = group.Id,
MT_Stammdaten_MeineKontakte_EndUser = endUser,
MT_Stammdaten_MeineKontakte_Participent = participent,
}
contact = cClient.AddContact(contact);
ID を持つオブジェクトが既に存在することをエンティティ フレームワークに伝えるにはどうすればよいでしょうか。ほとんどのオブジェクトがネストされているという事実のため、私はかなり一般的なソリューションを好みます。