【发布时间】:2013-01-17 19:05:10
【问题描述】:
我有以下课程
public class ObjectA{
private List<ObjectB> list;
}
ObjectA 和 ObjectB 是 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; }
}
我做错了什么?
谢谢。
【问题讨论】:
-
您的映射似乎有问题,因为 EF 认为关系是 1:N。你的 ObjectB 是如何定义的?
-
@LadislavMrnka :edmx 中根本没有 ClassB。添加了定义。谢谢,
-
如果架构中有 ClassAClassB,则没有映射 M:N 关系。相反,您有两个 1:N 关系,并且您的 ClassA 和 ClassB 必须具有指向 ClassAClassB 的导航属性。为什么要映射 ClassAClassB?它是否包含除 FK 之外的任何其他内容?
-
@LadislavMrnka:感谢您的评论。基本上数据库中的每个 M:N 关系都由两个 1:N 关系和之间的关系表组成。我没有 ClassB 因为我不需要它(而且它在另一个模式中)。我只需要删除关系。我确实有从 ClassA 到 ClassAClassB 的导航属性 (1:N)。
标签: entity-framework entity-framework-4