构造函数实体框架

时间:2016-10-31 13:30:24

标签: c# entity-framework constructor c#-6.0

我知道在构造函数中有很多关于虚拟成员调用的问题(在将其标记为重复之前)。我已经明白了,为什么会出现问题。

我还有两个未解答的问题:

实体框架6希望我将外键集合设置为虚拟。 但是,我想在某处初始化它们以防止NullReferenceExceptions

关于教程示例:

public class Student
{
    public Student() { }

    public int StudentId { get; set; }
    public string StudentName { get; set; }

    public virtual Standard Standard { get; set; }
}

public class Standard
{
    public Standard()
    {
        Students = new List<Student>();
    }
    public int StandardId { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Student> Students { get; set; }
}

他们肯定要我在构造函数中初始化虚拟ICollection<Student>。 我从其他问题中理解的是关于这个主题,这只是关于继承。当我的类没有继承时,这没关系(不好,但还可以)。

(ReSharper建议,让我的课程密封。但是,eeehm,是的,我不能拥有虚拟成员,实体框架想拥有?所以这不是真的有用。)所以现在,我想继续使用构造函数。

  • 这会在以后引起我的问​​题吗?或者这真的没问题,我可以忽略警告,ReSharper得到了我吗?

关于C#6

我可以用

初始化我的列表
public virtual ICollection<Student> Students { get; set; } = new List<Student>();
  • 这会导致同样的问题,例如在构造函数中初始化我的虚拟列表吗?或者这个完全不同(我不相信)?

更新

当初始化运行但虚拟成员调用不会运行时,会运行吗?

public class Standard
{
    public Standard()
    {
        Students = InitializeMyListAndDoSomethingElse();
    }

    public virtual ICollection<Student> InitializeMyListAndDoSomethingElse()
    {
        DoSomethingElse();
        return new List<Student>();
    }

    public virtual ICollection<Student> Students { get; set; };
}

0 个答案:

没有答案