【问题标题】:Write a private property which is list of own class objects编写一个私有属性,它是自己的类对象的列表
【发布时间】:2018-07-22 20:57:04
【问题描述】:

我有一个类,它有一些私有属性,这些属性是它自己的类型列表。当我想配置实体框架以在写入 db 时考虑它们时,我收到此错误:

类型“ICollection”必须是不可为空的值类型才能在泛型类型或方法中用作参数“T”

班级是:

public partial class ModelItem
{
    public int Id { get; set; }

    public string Lable { get; set; }

    private ICollection<ModelItem> Prop_InputNodes
    {
        get;  set;
    }

    public class ModelItemConfiguration : EntityTypeConfiguration<ModelItem>
    {
        public ModelItemConfiguration()
        {
            Property(x => x.Prop_InputNodes); // <<-- Error raises here
        }
    }
}

我几乎在 stackoverflow 中看到了所有类似的帖子,但我找不到解决方案。 你知道问题出在哪里吗?谢谢。

【问题讨论】:

  • 根据错误,Property 是一种期望以不可为空的值类型(例如 intdouble)调用的方法。您没有传入不可为空的值类型。
  • 那我如何将 Prop_InputNodes 保存在数据库中?

标签: c# entity-framework


【解决方案1】:

你应该使用集合映射方法:

public class ModelItemConfiguration : EntityTypeConfiguration<ModelItem>
{
    public ModelItemConfiguration()
    {
        this.HasMany(x => x.Prop_InputNodes);
    }
}

这将创建一个根据默认约定命名的外键字段:ModelItem_Id。如果您想更改该名称,您可以执行以下操作:

this.HasMany(x => x.Prop_InputNodes)
    .WithOptional()
    .Map(m => m.MapKey("ParentID"));

【讨论】:

  • 该类也有一个Prop_OutputNodes,所以我将它添加到HasMany(x =&gt; x.Prop_InputNodes).WithMany(y =&gt; y.Prop_OutputNodes); 之类的配置中。希望它可以帮助将来的人。
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多