2013-01-17 32 views
1

我有下面的類實體框架 - 刪除N:N關係

public class ObjectA{ 
    private List<ObjectB> list;  
} 

ObjectAObjectB是N:N的關係。

我想只刪除關係,我用

while (objectA.list.Any()) 
     objectA.list.Remove(objectA.list.First()); 
  • 列表是關係表的 -

    List<ObjectAobjectB> 
    

我也得到

操作失敗:由於 中的一個或多個外鍵屬性不可空,因此無法更改此關係。當對關係進行更改時, 相關的外鍵屬性設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性 分配另一個非空值,否則必須刪除不相關的對象。

編輯:更新模型定義
有三個表在我的模型:
* ClassA的 - SchemaA,
* ClassAClassB - SchemaA,
* ClassB的 - SchemaB,

在我的情況(和edmx)我只有方案A(ClassA和ClassAClassB)
因爲它是1:N到關係表。

這是從edmx生成的代碼。

public partial class ClassA:DomainEntity 
{ 
    .... 
    public virtual ICollection<ClassB> ClassAClassB { get; set; } 
} 

我在做什麼錯?

謝謝。

+0

看起來你的映射有些問題,因爲EF認爲關係是1:N。你的ObjectB是如何定義的? –

+0

@LadislavMrnka:edmx中根本沒有ClassB。新增定義。謝謝, – Jeb

+0

如果您在架構中有ClassAClassB,則您沒有映射M:N關係。您改爲具有兩個1:N關係,並且您的ClassA和ClassB必須具有指向ClassAClassB的導航屬性。爲什麼你有ClassAClassB映射?它是否包含除FK之外的其他內容? –

回答

1

如果您與不可空的FK具有一對多關係,則還必須刪除ObjectB,因爲從導航屬性中刪除它只會刪除關係(使FK爲空),但不會刪除ObjectB本身。試試這個:

while (objectA.list.Any()) { 
    var b = b; 
    objectA.list.Remove(b); 
    entities.DeleteObject(b);  
} 
+0

謝謝。但是我想只刪除關係 – Jeb

+0

在這種情況下,ClassAClassB必須有可空的FK。 –

+0

爲什麼? 我正在刪除關係表中的整個行。不僅關鍵列 – Jeb