C# 实体框架一对多所需映射不起作用

C# 实体框架一对多所需映射不起作用,c#,entity-framework-6,entity-framework-mapping,C#,Entity Framework 6,Entity Framework Mapping,我有两个班,1-1的关系 class A { public long Id; public virtual ICollection<B> Bees; } class B { public long Id; public A MyA; } 执行此操作时的预期行为: var aaaaah = new A(); aaaaah.Bees = null; MyDbContext.A.Add(a); 应该是正在引发的异常。但实体框架插入没有投诉。我在映射中做

我有两个班,1-1的关系

class A
{
    public long Id;
    public virtual ICollection<B> Bees;
}

class B
{
    public long Id;
    public A MyA;
}
执行此操作时的预期行为:

var aaaaah = new A();
aaaaah.Bees = null;
MyDbContext.A.Add(a);
应该是正在引发的异常。但实体框架插入没有投诉。我在映射中做错了什么

编辑:通过在Bees属性上添加[System.ComponentModel.DataAnnotations.Required]注释,我为这个问题提供了一个丑陋的临时解决方案。但这只会检查Bees是否为空,如果它被实例化,则不会检查它是否为空列表。

使用EF或SQL没有真正的本地方法来实现这一点,也就是说,没有B,你无法创建A,没有A,你也无法创建B。僵局

您需要在业务层中创建一些逻辑来实施约束。例如

class A
{
    ...
    public A(B b)
    {
        this.Bees = new List<B>();
        this.Bees.Add(b);
    }
}

class B
{
    ...
    public B(A a)
    {
        this.MyA = a;
    }
}
A类
{
...
公共服务A(B)
{
this.Bees=新列表();
本.蜜蜂.加入(b);
}
}
B类
{
...
公共图书馆B(A)
{
this.MyA=a;
}
}

注意:假设代码优先,如果db首先在部分类中进行定制。

对不起,我不得不投票支持
aaaaaah.Bees
:)谢谢,这让我发疯了。我喜欢保持我的EF poco尽可能干净,因此我将把该逻辑从DAL中移到业务逻辑层。
class A
{
    ...
    public A(B b)
    {
        this.Bees = new List<B>();
        this.Bees.Add(b);
    }
}

class B
{
    ...
    public B(A a)
    {
        this.MyA = a;
    }
}