我需要在實體框架中重新進行級聯刪除,儘管搜索幾個小時並不接近解決方案。簡而言之,如果我有一個與子對象(MyObjectDetail)具有1-> 0..1關係的實體(MyObject),那麼我不能刪除MyObject而沒有更新的異常來抱怨約束 - 但僅限IF子MyObjectDetail未加載到內存中。刪除具有未加載的子實體的實體
System.Data.UpdateException: A relationship is being added or deleted from an AssociationSet 'FK_MyObjectDetail_MyObject'. With cardinality constraints, a corresponding 'MyObjectDetail' must also be added or deleted.
如果孩子(刪除之前爲MyObject即MyObject.MyObjectDetailReference.Load())調用,那麼它工作正常。
我的問題是,當然,我不希望(讀:不能)從MyObjectDetail加載varbinary字段,每次我想刪除父MyObject。這是可能的,還是我將不得不在一些手動SQL調用中進行破解以使其工作?
在SQL服務器:
MyObject [PK:Id<int>] -> MyObjectDetail [PK:MyObjectId<int>, Data<varbinary>]
的關係設置爲 「級聯」 的更新和刪除。
在EF設計者:
MyObject [1] -> [0..1] MyObjectDetail
在EF XML:
SSDL:
<Association Name="FK_MyObjectDetail_MyObject"> <End Role="MyObject" Type="MyEntities.Store.MyObject" Multiplicity="1"> <OnDelete Action="Cascade" /> </End> <End Role="ObjectDetail" Type="MyEntities.Store.ObjectDetail" Multiplicity="0..1" /> <ReferentialConstraint> <Principal Role="MyObject"> <PropertyRef Name="Id" /> </Principal> <Dependent Role="ObjectDetail"> <PropertyRef Name="MyObjectId" /> </Dependent> </ReferentialConstraint> </Association>
CSDL:
<Association Name="FK_MyObjectDetail_MyObject"> <End Type="MyEntities.MyObject" Role="MyObject" Multiplicity="1"> <OnDelete Action="Cascade" /> </End> <End Type="MyEntities.MyObjectDetail" Role="ObjectDetail" Multiplicity="0..1" /> <ReferentialConstraint> <Principal Role="MyObject"> <PropertyRef Name="Id" /></Principal> <Dependent Role="ObjectDetail"> <PropertyRef Name="MyObjectId" /> </Dependent> </ReferentialConstraint> </Association>
(該<OnDelete>在C SDL已經由我手動添加,如http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/)
我是否在做任何錯誤的事情,或者這在EF的v1中是不可能的?
輝煌。這就是我一直在尋找的東西 - 謝謝!而不是EFExtensions,我只是使用:EntityKey = new EntityKey(「MyEntities.MyObjectDetailSet」,「MyObjectId」,id) – dkr88 2009-08-12 20:20:42