相关疑难解决方法(0)

虚拟成员在构造函数中调用

我从ReSharper收到一条关于从我的对象构造函数调用虚拟成员的警告.

为什么不做这件事?

c# resharper constructor warnings virtual-functions

1270
推荐指数
11
解决办法
17万
查看次数

246
推荐指数
8
解决办法
17万
查看次数

为什么我的Entity Framework Code First代理集合为null,为什么我不能设置它?

我正在使用DBContext并且有两个类,其属性都是虚拟的.我可以在调试器中看到,当我查询上下文时,我正在获取代理对象.但是,当我尝试添加它时,collection属性仍为null.我认为代理将确保集合初始化.

因为我的Poco对象可以在其数据上下文之外使用,所以我在构造函数中添加了对集合为null的检查,并在必要时创建它:

public class DanceStyle
{
    public DanceStyle()
    {
        if (DanceEvents == null)
        {
            DanceEvents = new Collection<DanceEvent>();
        }
    }
    ...
    public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这在数据上下文之外工作但是如果我使用查询检索对象,虽然测试是真的,但是当我尝试设置它时,我得到以下异常:'类型'DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94'上的属性'DanceEvents'无法设置,因为集合已经设置为EntityCollection.

我可以看到它是null并且我无法添加它,但我也不能将它设置为集合,因为代理已经设置它.因此我无法使用它.我糊涂了.

这是DanceEvent类:

public class DanceEvent
{
    public DanceEvent()
    {
        if (DanceStyles == null)
        {
            DanceStyles = new Collection<DanceStyle>();
        }
    }
    ...
    public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我从上面的代码中省略了其他值类型属性.我在上下文类中没有其他类的映射.

collections entity-framework poco proxies

41
推荐指数
2
解决办法
3万
查看次数

为什么实体框架返回空List <>而不是空?

我是ASP .NET MVC世界的新手.也许,这就是我无法向自己解释对我来说是一个令人讨厌的问题的原因.

我有一节有一对多的关系.

class MyClass{
    public List<OtherClass> otherClasses {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

当我持久化这个类的一个实例时,我用空List <>填充它的关系

MyClass myClass = new MyClass(){ otherClasses = new List<OtherClass>() }
context.myClass.Add(myClass);
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试检索该实例时,出于任何原因,我尝试访问该列表,系统给我一个空参考例外...

我的问题是:为什么EF不返回空列表而不是空列表?特别是在这种情况下,我坚持使用空列表?

有什么方法可以避免验证实例是否为空?

c# entity-framework nullreferenceexception ef-code-first entity-framework-4.1

29
推荐指数
2
解决办法
2万
查看次数

NHibernate中只读列表的最佳实践是什么?

我正在研究的域模型具有根聚合和子实体.类似下面的代码:

class Order
{
   IList<OrderLine> Lines {get;set;}
}

class OrderLine
{
}
Run Code Online (Sandbox Code Playgroud)

现在我希望我的订单控制线.像这样的东西:

class Order
{
   OrderLine[] Lines {get;}

   void AddLine(OrderLine line);
}
Run Code Online (Sandbox Code Playgroud)

目前我们使用以下模式:

class Order
{
   private IList<OrderLine> lines = new List<OrderLine>();
   OrderLine[] Lines {get {return this.lines;}}

   void AddLine(OrderLine line)
   {
      this.orders.Add(line);
   {
}
Run Code Online (Sandbox Code Playgroud)

NHibernate直接映射到lines字段.

现在问题......

  • 你在这种情况下练习什么?
  • 有没有人使用方法:public IEnumerable GetLines()
  • 您使用什么作为财产的返回类型?可能是ReadOnlyCollection或IEnumerable;
  • 可能这不是最好问的地方吗?建议请.

更新:似乎IEnumerable获胜,但解决方案仍然不完美......

.net arrays nhibernate domain-driven-design list

10
推荐指数
2
解决办法
4285
查看次数

实体框架6导航集合为空而不是空

我正在尝试使用Entity Framework 6编写关系数据库应用程序.我有类似于以下类的类:

public class Subject
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}

public class Student
{
    public int ID { get; set; }
    public int SubjectID { get; set; }
    public string Name { get; set; }
    public virtual Subject Subject { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

(好吧,这是一个不好的例子,因为实际上你希望每个学生都在一个以上的学科,但现在让我们忽略它,因为这是我能想到的最好的例子.)

问题在于,只要有一个没有学生的主题,而不是subjectInstance.Students返回一个空的集合,它会返回null.这意味着我不能打电话subjectInstance.Students.Add(studentInstance)来添加第一个学生.相反,我必须contextInstance.Students.Add(studentInstance)在手动设置SubjectID字段后通过调用单独添加学生studentInstance.一旦有一个或多个学生已经与该主题相关联,subjectInstance.Students则不再为空,我可以按预期方式添加更多学生. …

c# entity-framework-6

5
推荐指数
1
解决办法
3180
查看次数