Entity framework 实体框架&x2B;存储库模式和外键更新未更新相关实体

Entity framework 实体框架&x2B;存储库模式和外键更新未更新相关实体,entity-framework,repository-pattern,unit-of-work,navigation-properties,Entity Framework,Repository Pattern,Unit Of Work,Navigation Properties,我使用的是实体框架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 {

我使用的是实体框架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; }
}
导航属性attivita.Viaggio未更新

如果我直接更新attivita.Viaggio而不是Id

ViaggioAttivita attivita = new ViaggioAttivita();
attivita.Viaggio = unitOfWork.ViaggiRepository.GetByID(ParentId);
unitOfWork.ViaggiAttivitaRepository.Insert(attivita);
Viaggio当然会更新,但IdViaggio键也会更新

我错过了什么

为什么我会有这种不同

我尝试调用.Save(),但没有任何变化

似乎只有手动更新实体时关系才会更新,但如果仅更新密钥,关系不会更新

多谢各位

编辑1:

我使用的是SQLServer2008、MVC3、EntityFramework5(当然是运行时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>

区别在于:

a)仅设置外键。(Id)如果缓存中加载了此实体,则可以设置导航属性。如果未加载,则需要触发加载。您可以搜索如何或何时自动完成此操作。请参阅主题惰性加载与.include

b)使用实体设置导航属性。 外键Id字段支持导航属性。
现在EF可以看到Nav属性及其键。它可以使用已有的数据设置ID。不需要从数据库加载。设置好了。

您的配置是什么样子的?您的意思是什么?我使用的是SQLServer2008、MVC3、EntityFramework5(当然是运行时v4.0.30319)。数据库优先模式。这两个表具有这种关系(当然,否则它不会使用第二种方法填充键)。请向我展示定义的关系(在Fluent API或您的数据注释中)。我编辑了我的问题。这有用吗?这在关系修复的细节中。保存更改前是否需要更新数据?(调用
SaveChanges()
后,FK关联中涉及的所有属性都应同步)。确定。现在我明白了。非常感谢。
<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>