2010-04-11 63 views
5

我和家長之間的關係是他們通過邊緣連接。它類似於有向圖結構。將子女添加到實體框架中的現有父記錄

DAL:

public void SaveResource(Resource resource) 
    { 
     context.AddToResources(resource); //Should also add children. 
     context.SaveChanges(); 
    } 

    public Resource GetResource(int resourceId) 
    { 
     var resource = (from r in context.Resources 
         .Include("ToEdges").Include("FromEdges") 
         where r.ResourceId == resourceId 
         select r).SingleOrDefault(); 

     return resource; 
    } 

服務:

public void AddChildResource(int parentResourceId, Resource childResource) 
    { 
     Resource parentResource = repository.GetResource(parentResourceId); 

     ResourceEdge inEdge = new ResourceEdge(); 
     inEdge.ToResource = childResource; 

     parentResource.ToEdges.Add(inEdge); 

     repository.SaveResource(parentResource); 
    } 

錯誤:具有相同鍵的對象已經存在於ObjectStateManager。現有對象處於「未更改」狀態。如果對象處於添加狀態,則只能將其添加到ObjectStateManager。

圖片:

alt text http://img100.imageshack.us/img100/374/entity.png

有人告訴我這是提交一個孩子已經存在的父序列:

獲取父 - >附加兒童父 - >提交父。

這就是我使用的順序。上面的代碼是使用存儲庫模式從ASP.NET MVC 2應用程序中提取的。

EDMX文件:

<?xml version="1.0" encoding="utf-8"?> 
    <edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx"> 
     <!-- EF Runtime content --> 
     <edmx:Runtime> 
     <!-- SSDL content --> 
     <edmx:StorageModels> 
      <Schema Namespace="XDbModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"> 
      <EntityContainer Name="XDbModelStoreContainer"> 
       <EntitySet Name="Bundles" EntityType="XDbModel.Store.Bundles" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="CellProviders" EntityType="XDbModel.Store.CellProviders" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Comments" EntityType="XDbModel.Store.Comments" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="LocationPoints" EntityType="XDbModel.Store.LocationPoints" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Locations" EntityType="XDbModel.Store.Locations" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Offers" EntityType="XDbModel.Store.Offers" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="PostBundleJunction" EntityType="XDbModel.Store.PostBundleJunction" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="PostMedia" EntityType="XDbModel.Store.PostMedia" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Posts" EntityType="XDbModel.Store.Posts" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="ResourceEdges" EntityType="XDbModel.Store.ResourceEdges" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="ResourceNames" EntityType="XDbModel.Store.ResourceNames" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Resources" EntityType="XDbModel.Store.Resources" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="sysdiagrams" EntityType="XDbModel.Store.sysdiagrams" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Users" EntityType="XDbModel.Store.Users" store:Type="Tables" Schema="dbo" /> 
       <EntitySet Name="Votes" EntityType="XDbModel.Store.Votes" store:Type="Tables" Schema="dbo" /> 
       <AssociationSet Name="FK_Comments_Offers" Association="XDbModel.Store.FK_Comments_Offers"> 
       <End Role="Offers" EntitySet="Offers" /> 
       <End Role="Comments" EntitySet="Comments" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Comments_Users" Association="XDbModel.Store.FK_Comments_Users"> 
       <End Role="Users" EntitySet="Users" /> 
       <End Role="Comments" EntitySet="Comments" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_LocationPoints_Locations" Association="XDbModel.Store.FK_LocationPoints_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="LocationPoints" EntitySet="LocationPoints" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_PostBundleJunction_Bundles" Association="XDbModel.Store.FK_PostBundleJunction_Bundles"> 
       <End Role="Bundles" EntitySet="Bundles" /> 
       <End Role="PostBundleJunction" EntitySet="PostBundleJunction" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_PostBundleJunction_Posts" Association="XDbModel.Store.FK_PostBundleJunction_Posts"> 
       <End Role="Posts" EntitySet="Posts" /> 
       <End Role="PostBundleJunction" EntitySet="PostBundleJunction" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_Locations" Association="XDbModel.Store.FK_Posts_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_ResourceNames" Association="XDbModel.Store.FK_Posts_ResourceNames"> 
       <End Role="ResourceNames" EntitySet="ResourceNames" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_Users" Association="XDbModel.Store.FK_Posts_Users"> 
       <End Role="Users" EntitySet="Users" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceEdges_Resources" Association="XDbModel.Store.FK_ResourceEdges_Resources"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceEdges" EntitySet="ResourceEdges" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceEdges_Resources1" Association="XDbModel.Store.FK_ResourceEdges_Resources1"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceEdges" EntitySet="ResourceEdges" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceNames_Resources" Association="XDbModel.Store.FK_ResourceNames_Resources"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceNames" EntitySet="ResourceNames" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Users_Locations" Association="XDbModel.Store.FK_Users_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="Users" EntitySet="Users" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Votes_Posts" Association="XDbModel.Store.FK_Votes_Posts"> 
       <End Role="Posts" EntitySet="Posts" /> 
       <End Role="Votes" EntitySet="Votes" /> 
       </AssociationSet> 
      </EntityContainer> 
      <EntityType Name="Bundles"> 
       <Key> 
       <PropertyRef Name="BundleId" /> 
       </Key> 
       <Property Name="BundleId" Type="int" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="CellProviders"> 
       <Key> 
       <PropertyRef Name="CellProviderID" /> 
       </Key> 
       <Property Name="CellProviderID" Type="uniqueidentifier" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="Comments"> 
       <Key> 
       <PropertyRef Name="CommentID" /> 
       </Key> 
       <Property Name="CommentID" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="ParentPostID" Type="uniqueidentifier" /> 
       <Property Name="OfferPostID" Type="uniqueidentifier" /> 
       <Property Name="UserID" Type="uniqueidentifier" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="LocationPoints"> 
       <Key> 
       <PropertyRef Name="LocationPointId" /> 
       </Key> 
       <Property Name="LocationPointId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="Latitude" Type="float" Nullable="false" /> 
       <Property Name="Longitude" Type="float" Nullable="false" /> 
       <Property Name="Altitude" Type="float" Nullable="false" /> 
       <Property Name="Count" Type="int" Nullable="false" /> 
       <Property Name="LocationId" Type="int" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="Locations"> 
       <Key> 
       <PropertyRef Name="LocationId" /> 
       </Key> 
       <Property Name="LocationId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="Address1" Type="nvarchar" Nullable="false" MaxLength="200" /> 
       <Property Name="Address2" Type="nvarchar" MaxLength="200" /> 
       <Property Name="Address3" Type="nvarchar" MaxLength="200" /> 
       <Property Name="State" Type="nvarchar" Nullable="false" MaxLength="200" /> 
       <Property Name="Country" Type="nvarchar" Nullable="false" MaxLength="200" /> 
      </EntityType> 
      <EntityType Name="Offers"> 
       <Key> 
       <PropertyRef Name="OfferID" /> 
       </Key> 
       <Property Name="OfferID" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="NeedOffer" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="ProvisionOffer" Type="uniqueidentifier" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="PostBundleJunction"> 
       <Key> 
       <PropertyRef Name="BundleId" /> 
       <PropertyRef Name="PostId" /> 
       </Key> 
       <Property Name="BundleId" Type="int" Nullable="false" /> 
       <Property Name="PostId" Type="int" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="PostMedia"> 
       <Key> 
       <PropertyRef Name="MediaId" /> 
       </Key> 
       <Property Name="MediaId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="MediaExt" Type="nvarchar" Nullable="false" MaxLength="5" /> 
       <Property Name="PostId" Type="int" Nullable="false" /> 
       <Property Name="SynthId" Type="uniqueidentifier" /> 
      </EntityType> 
      <EntityType Name="Posts"> 
       <Key> 
       <PropertyRef Name="PostId" /> 
       </Key> 
       <Property Name="PostId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="PosterID" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="BundleId" Type="int" Nullable="false" /> 
       <Property Name="LocationId" Type="int" Nullable="false" /> 
       <Property Name="Tags" Type="uniqueidentifier" /> 
       <Property Name="Quanitity" Type="int" Nullable="false" /> 
       <Property Name="Description" Type="text" Nullable="false" /> 
       <Property Name="ResourceNameId" Type="int" Nullable="false" /> 
       <Property Name="Date" Type="datetime" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="ResourceEdges"> 
       <Key> 
       <PropertyRef Name="EdgeId" /> 
       </Key> 
       <Property Name="Rank" Type="int" Nullable="false" /> 
       <Property Name="EdgeId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="ToResourceId" Type="int" Nullable="false" /> 
       <Property Name="FromResourrceId" Type="int" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="ResourceNames"> 
       <Key> 
       <PropertyRef Name="ResourceNameId" /> 
       </Key> 
       <Property Name="ResourceNameId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="Name" Type="nvarchar" Nullable="false" MaxLength="100" /> 
       <Property Name="ResourceId" Type="int" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="Resources"> 
       <Key> 
       <PropertyRef Name="ResourceId" /> 
       </Key> 
       <Property Name="ResourceId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="Description" Type="nvarchar" MaxLength="50" /> 
      </EntityType> 
      <EntityType Name="sysdiagrams"> 
       <Key> 
       <PropertyRef Name="diagram_id" /> 
       </Key> 
       <Property Name="name" Type="nvarchar" Nullable="false" MaxLength="128" /> 
       <Property Name="principal_id" Type="int" Nullable="false" /> 
       <Property Name="diagram_id" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
       <Property Name="version" Type="int" /> 
       <Property Name="definition" Type="varbinary(max)" /> 
      </EntityType> 
      <EntityType Name="Users"> 
       <Key> 
       <PropertyRef Name="UserID" /> 
       </Key> 
       <Property Name="UserID" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="LocationId" Type="int" /> 
      </EntityType> 
      <EntityType Name="Votes"> 
       <Key> 
       <PropertyRef Name="VoteId" /> 
       </Key> 
       <Property Name="VoteId" Type="int" Nullable="false" /> 
       <Property Name="VoterId" Type="uniqueidentifier" Nullable="false" /> 
       <Property Name="VoteContent" Type="int" Nullable="false" /> 
       <Property Name="PostId" Type="int" Nullable="false" /> 
      </EntityType> 
      <Association Name="FK_Comments_Offers"> 
       <End Role="Offers" Type="XDbModel.Store.Offers" Multiplicity="0..1" /> 
       <End Role="Comments" Type="XDbModel.Store.Comments" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Offers"> 
        <PropertyRef Name="OfferID" /> 
       </Principal> 
       <Dependent Role="Comments"> 
        <PropertyRef Name="OfferPostID" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Comments_Users"> 
       <End Role="Users" Type="XDbModel.Store.Users" Multiplicity="1"> 
       <OnDelete Action="Cascade" /> 
       </End> 
       <End Role="Comments" Type="XDbModel.Store.Comments" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Users"> 
        <PropertyRef Name="UserID" /> 
       </Principal> 
       <Dependent Role="Comments"> 
        <PropertyRef Name="UserID" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_LocationPoints_Locations"> 
       <End Role="Locations" Type="XDbModel.Store.Locations" Multiplicity="1"> 
       <OnDelete Action="Cascade" /> 
       </End> 
       <End Role="LocationPoints" Type="XDbModel.Store.LocationPoints" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Locations"> 
        <PropertyRef Name="LocationId" /> 
       </Principal> 
       <Dependent Role="LocationPoints"> 
        <PropertyRef Name="LocationId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_PostBundleJunction_Bundles"> 
       <End Role="Bundles" Type="XDbModel.Store.Bundles" Multiplicity="1" /> 
       <End Role="PostBundleJunction" Type="XDbModel.Store.PostBundleJunction" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Bundles"> 
        <PropertyRef Name="BundleId" /> 
       </Principal> 
       <Dependent Role="PostBundleJunction"> 
        <PropertyRef Name="BundleId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_PostBundleJunction_Posts"> 
       <End Role="Posts" Type="XDbModel.Store.Posts" Multiplicity="1" /> 
       <End Role="PostBundleJunction" Type="XDbModel.Store.PostBundleJunction" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Posts"> 
        <PropertyRef Name="PostId" /> 
       </Principal> 
       <Dependent Role="PostBundleJunction"> 
        <PropertyRef Name="PostId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Posts_Locations"> 
       <End Role="Locations" Type="XDbModel.Store.Locations" Multiplicity="1" /> 
       <End Role="Posts" Type="XDbModel.Store.Posts" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Locations"> 
        <PropertyRef Name="LocationId" /> 
       </Principal> 
       <Dependent Role="Posts"> 
        <PropertyRef Name="LocationId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Posts_ResourceNames"> 
       <End Role="ResourceNames" Type="XDbModel.Store.ResourceNames" Multiplicity="1" /> 
       <End Role="Posts" Type="XDbModel.Store.Posts" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="ResourceNames"> 
        <PropertyRef Name="ResourceNameId" /> 
       </Principal> 
       <Dependent Role="Posts"> 
        <PropertyRef Name="ResourceNameId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Posts_Users"> 
       <End Role="Users" Type="XDbModel.Store.Users" Multiplicity="1" /> 
       <End Role="Posts" Type="XDbModel.Store.Posts" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Users"> 
        <PropertyRef Name="UserID" /> 
       </Principal> 
       <Dependent Role="Posts"> 
        <PropertyRef Name="PosterID" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_ResourceEdges_Resources"> 
       <End Role="Resources" Type="XDbModel.Store.Resources" Multiplicity="1" /> 
       <End Role="ResourceEdges" Type="XDbModel.Store.ResourceEdges" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Resources"> 
        <PropertyRef Name="ResourceId" /> 
       </Principal> 
       <Dependent Role="ResourceEdges"> 
        <PropertyRef Name="ToResourceId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_ResourceEdges_Resources1"> 
       <End Role="Resources" Type="XDbModel.Store.Resources" Multiplicity="1" /> 
       <End Role="ResourceEdges" Type="XDbModel.Store.ResourceEdges" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Resources"> 
        <PropertyRef Name="ResourceId" /> 
       </Principal> 
       <Dependent Role="ResourceEdges"> 
        <PropertyRef Name="FromResourrceId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_ResourceNames_Resources"> 
       <End Role="Resources" Type="XDbModel.Store.Resources" Multiplicity="1"> 
       <OnDelete Action="Cascade" /> 
       </End> 
       <End Role="ResourceNames" Type="XDbModel.Store.ResourceNames" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Resources"> 
        <PropertyRef Name="ResourceId" /> 
       </Principal> 
       <Dependent Role="ResourceNames"> 
        <PropertyRef Name="ResourceId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Users_Locations"> 
       <End Role="Locations" Type="XDbModel.Store.Locations" Multiplicity="0..1"> 
       <OnDelete Action="Cascade" /> 
       </End> 
       <End Role="Users" Type="XDbModel.Store.Users" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Locations"> 
        <PropertyRef Name="LocationId" /> 
       </Principal> 
       <Dependent Role="Users"> 
        <PropertyRef Name="LocationId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      <Association Name="FK_Votes_Posts"> 
       <End Role="Posts" Type="XDbModel.Store.Posts" Multiplicity="1"> 
       <OnDelete Action="Cascade" /> 
       </End> 
       <End Role="Votes" Type="XDbModel.Store.Votes" Multiplicity="*" /> 
       <ReferentialConstraint> 
       <Principal Role="Posts"> 
        <PropertyRef Name="PostId" /> 
       </Principal> 
       <Dependent Role="Votes"> 
        <PropertyRef Name="PostId" /> 
       </Dependent> 
       </ReferentialConstraint> 
      </Association> 
      </Schema> 
     </edmx:StorageModels> 
     <!-- CSDL content --> 
     <edmx:ConceptualModels> 
      <Schema Namespace="XDbModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm"> 
      <EntityContainer Name="XDbEntities" annotation:LazyLoadingEnabled="true"> 
       <EntitySet Name="Bundles" EntityType="XDbModel.Bundle" /> 
       <EntitySet Name="CellProviders" EntityType="XDbModel.CellProvider" /> 
       <EntitySet Name="Comments" EntityType="XDbModel.Comment" /> 
       <EntitySet Name="LocationPoints" EntityType="XDbModel.LocationPoint" /> 
       <EntitySet Name="Locations" EntityType="XDbModel.Location" /> 
       <EntitySet Name="Offers" EntityType="XDbModel.Offer" /> 
       <EntitySet Name="PostMedias" EntityType="XDbModel.PostMedia" /> 
       <EntitySet Name="Posts" EntityType="XDbModel.Post" /> 
       <EntitySet Name="ResourceEdges" EntityType="XDbModel.ResourceEdge" /> 
       <EntitySet Name="ResourceNames" EntityType="XDbModel.ResourceName" /> 
       <EntitySet Name="Resources" EntityType="XDbModel.Resource" /> 
       <EntitySet Name="sysdiagrams" EntityType="XDbModel.sysdiagram" /> 
       <EntitySet Name="Users" EntityType="XDbModel.User" /> 
       <EntitySet Name="Votes" EntityType="XDbModel.Vote" /> 
       <AssociationSet Name="FK_Comments_Offers" Association="XDbModel.FK_Comments_Offers"> 
       <End Role="Offers" EntitySet="Offers" /> 
       <End Role="Comments" EntitySet="Comments" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Comments_Users" Association="XDbModel.FK_Comments_Users"> 
       <End Role="Users" EntitySet="Users" /> 
       <End Role="Comments" EntitySet="Comments" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_LocationPoints_Locations" Association="XDbModel.FK_LocationPoints_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="LocationPoints" EntitySet="LocationPoints" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_Locations" Association="XDbModel.FK_Posts_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Users_Locations" Association="XDbModel.FK_Users_Locations"> 
       <End Role="Locations" EntitySet="Locations" /> 
       <End Role="Users" EntitySet="Users" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_ResourceNames" Association="XDbModel.FK_Posts_ResourceNames"> 
       <End Role="ResourceNames" EntitySet="ResourceNames" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Posts_Users" Association="XDbModel.FK_Posts_Users"> 
       <End Role="Users" EntitySet="Users" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_Votes_Posts" Association="XDbModel.FK_Votes_Posts"> 
       <End Role="Posts" EntitySet="Posts" /> 
       <End Role="Votes" EntitySet="Votes" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceEdges_Resources" Association="XDbModel.FK_ResourceEdges_Resources"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceEdges" EntitySet="ResourceEdges" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceEdges_Resources1" Association="XDbModel.FK_ResourceEdges_Resources1"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceEdges" EntitySet="ResourceEdges" /> 
       </AssociationSet> 
       <AssociationSet Name="FK_ResourceNames_Resources" Association="XDbModel.FK_ResourceNames_Resources"> 
       <End Role="Resources" EntitySet="Resources" /> 
       <End Role="ResourceNames" EntitySet="ResourceNames" /> 
       </AssociationSet> 
       <AssociationSet Name="PostBundleJunction" Association="XDbModel.PostBundleJunction"> 
       <End Role="Bundles" EntitySet="Bundles" /> 
       <End Role="Posts" EntitySet="Posts" /> 
       </AssociationSet> 
      </EntityContainer> 
      <EntityType Name="Bundle"> 
       <Key> 
       <PropertyRef Name="BundleId" /> 
       </Key> 
       <Property Name="BundleId" Type="Int32" Nullable="false" /> 
       <NavigationProperty Name="Posts" Relationship="XDbModel.PostBundleJunction" FromRole="Bundles" ToRole="Posts" /> 
      </EntityType> 
      <EntityType Name="CellProvider"> 
       <Key> 
       <PropertyRef Name="CellProviderID" /> 
       </Key> 
       <Property Name="CellProviderID" Type="Guid" Nullable="false" /> 
      </EntityType> 
      <EntityType Name="Comment"> 
       <Key> 
       <PropertyRef Name="CommentID" /> 
+0

您使用的是哪個版本的entity-framework/VS2010(?)? – 2010-04-13 03:04:43

+0

VS2010 RC1,不確定框架版本。 – 2010-04-13 17:06:48

+0

SingleOrDefault方法是Linq2Sql ...在EF中使用FirstOrDefault。只是一個觀察。 – 2010-04-15 19:41:41

回答

2

啊,這其實很簡單,一旦你想想看.. 什麼你要做到這一點添加資源到數據上下文,即使這個資源對象是從數據庫中首先收到的。所以錯誤不是抱怨你的子對象,而是關於你的父對象! :)

基本上,如果你評論SaveResource()方法的第一行,它應該工作正常! 例如: -

public void SaveResource(Resource resource) 
{ 
    // context.AddToResources(resource); //Should also add children. 
    context.SaveChanges(); 
} 

或者只是移動AddChildResource方法您的DAL:

public void AddChildResource(int parentResourceId, Resource childResource) 
{ 
    Resource parentResource = repository.GetResource(parentResourceId); 

    ResourceEdge inEdge = new ResourceEdge(); 
    inEdge.ToResource = childResource; 

    parentResource.ToEdges.Add(inEdge); 

    context.SaveChanges(); 
} 
0

想必它的抱怨childResource在加狀態不是。您將其添加到處於添加狀態的邊緣對象。

你可以嘗試翻轉您設置的關聯輪的方式: -

public void AddChildResource(int parentResourceId, Resource childResource) 
{ 
    Resource parentResource = repository.GetResource(parentResourceId); 

    ResourceEdge inEdge = new ResourceEdge(); 
    // inEdge.ToResource = childResource; <-- don't do this 

    parentResource.ToEdges.Add(inEdge); 
    childResource.FromEdges.Add(inEdge); // try this instead 

    repository.SaveResource(parentResource); 
} 
+2

你好,我得到同樣的錯誤兩種方式:(在這一點上,我正在考慮永遠不要使用EF來爲我的其他項目 – 2010-04-13 02:54:29

+0

所有這些對象從同一個對象上下文?如何管理ObjectContext生命週期? – 2010-04-13 03:33:01

+0

如果可能,還可以發佈EF/VS版本號和EDMX文件嗎? – 2010-04-13 04:01:51

相關問題