2

EntityFramework5とUnitOfWork+リポジトリパターンを使用しています。

次のエンティティを作成しようとしています。

public partial class ViaggioAttivita
{
    public System.Guid Id { get; set; }
    public System.Guid IdViaggio { get; set; }
    public virtual Viaggio Viaggio { get; set; }
}

public partial class Viaggio
{
    public System.Guid Id { get; set; }
    public virtual ICollection<ViaggioAttivita> ViaggiAttivita { get; set; }
}

IdViaggioにデータを入力する新しいViaggioAttivitaエンティティを作成すると、

ViaggioAttivita attivita = new ViaggioAttivita();
attivita.IdViaggio = ParentId;
unitOfWork.ViaggiAttivitaRepository.Insert(attivita);

ナビゲーションプロパティattivita.Viaggioは更新されません。

Idの代わりにattivita.Viaggioを直接更新した場合

ViaggioAttivita attivita = new ViaggioAttivita();
attivita.Viaggio = unitOfWork.ViaggiRepository.GetByID(ParentId);
unitOfWork.ViaggiAttivitaRepository.Insert(attivita);

もちろんViaggioは更新されますが、IdViaggioキーも更新されます。

私は何が欠けていますか?

なぜ私はこの違いを得るのですか?

.Save()を呼び出してみましたが、何も変わりません。

エンティティを手動で更新した場合にのみリレーションが更新されるようですが、キーのみを更新した場合はリレーションは更新されません。

ありがとうございました

編集1:

私はSQLServer2008、MVC3、Entity Framework 5(もちろんランタイムv4.0.30319)を使用しています。データベースファーストモード。2つのテーブルには関係があります(もちろん、そうでない場合は、2番目の方法を使用してキーにデータを入力しません)。

編集2:

私はいくつかのEDMX情報を貼り付けようとしています。

<EntityType Name="Viaggio">
    <Key>
      <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="Guid" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
    <NavigationProperty Name="ViaggiAttivita" Relationship="DatabaseModel.FK_ViaggiAttivita_Viaggi" FromRole="Viaggi" ToRole="ViaggiAttivita" />
  </EntityType>

  <EntityType Name="ViaggioAttivita">
    <Key>
      <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="Guid" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
    <Property Name="IdViaggio" Type="Guid" Nullable="false" />
    <NavigationProperty Name="Viaggio" Relationship="DatabaseModel.FK_ViaggiAttivita_Viaggi" FromRole="ViaggiAttivita" ToRole="Viaggi" />
  </EntityType>




 <AssociationSet Name="FK_ViaggiAttivita_Viaggi" Association="DatabaseModel.FK_ViaggiAttivita_Viaggi">
      <End Role="Viaggi" EntitySet="Viaggi" />
      <End Role="ViaggiAttivita" EntitySet="ViaggiAttivita" />
    </AssociationSet>
4

1 に答える 1

0

違いは次のとおりです。

a)外部キーのみを設定します。 (Id)このエンティティがキャッシュにロードされている場合、Navigationプロパティを設定できます。ロードされていない場合は、ロードをトリガーする必要があります。これが自動的に行われる方法または時期を検索できます。トピック遅延読み込みと.includeを参照してください

b)エンティティを使用してナビゲーションプロパティを設定します。 ナビゲーションプロパティは、外部キーIDフィールドでサポートされています。これで、EFはNavプロパティとそのキーを確認できます。すでに持っているデータでIDを設定できます。DBからロードする必要はありません。だから設定されています。

于 2013-02-17T15:21:55.667 に答える