2

我正在使用實體框架5和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; } 
} 

我注意到,當我創建新ViaggioAttivita實體填充IdViaggio,當我這樣做

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

的導航屬性attivita.Viaggio不會更新。

如果我直接更新attivita.Viaggio代替編號

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

課程的維亞焦得到更新,但IdViaggio鍵過於更新。

我錯過了什麼?

爲什麼我得到這種差異?

我試着調用一個.Save(),但沒有任何變化。

似乎只有手動更新實體時纔會更新關係,但如果我只更新密鑰,它們不會更新。

謝謝

編輯1:

我SQL Server上的2008年,MVC3,實體框架5(當然運行v4.0.30319)。數據庫優先模式。這兩個表有關係(當然,否則它不會使用第二種方法填充密鑰)。

編輯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> 
+0

你的配置是什麼樣的? – IronMan84 2013-02-15 14:04:38

+0

你是什麼意思?我在Sql Server 2008,MVC3,實體框架5(當然是運行時v4.0.30319)。數據庫優先模式。這兩個表有關係(當然,否則它不會使用第二種方法填充密鑰)。 – 2013-02-15 14:24:59

+0

對。請向我展示定義的關係(在Fluent API或您的數據註釋中)。 – IronMan84 2013-02-15 14:49:59

回答

0

的區別是:

a)將外鍵而已。(Id)如果此實體已加載到緩存中,則可以設置Navigation屬性。如果未加載,則需要觸發加載。您可以搜索如何或何時自動完成。請參閱主題惰性加載與.include

b)使用實體設置導航屬性。 導航屬性由外鍵標識字段支持。 現在EF可以看到Nav屬性和它的關鍵。它可以用它已有的數據設置ID。無需從數據庫加載。它被設置。

+0

好的。現在我明白了。謝謝! – 2013-02-26 11:24:15