Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 先编码多对多混乱这是怎么回事?_Asp.net Mvc_Ef Code First - Fatal编程技术网

Asp.net mvc 先编码多对多混乱这是怎么回事?

Asp.net mvc 先编码多对多混乱这是怎么回事?,asp.net-mvc,ef-code-first,Asp.net Mvc,Ef Code First,这是我的模型的剪子: public class ContractParent { public int ContractParentID { get; set; } public string Name { get; set; } public string Verbiage { get; set; } public int Position { get; set; } public bool IncludedByDefault { get; set; }

这是我的模型的剪子:

public class ContractParent
{
    public int ContractParentID { get; set; }
    public string Name { get; set; }
    public string Verbiage { get; set; }
    public int Position { get; set; }
    public bool IncludedByDefault { get; set; }
    public virtual IEnumerable<ContractChild> ContractChilds { get; set; }
    public virtual bool HasOnlyOneChild { get; set; }
}

public class ContractParentItem
{
    public int ContractParentItemID { get; set; }
    public virtual int ContractParentID { get; set; }
    public virtual ContractParent ContractParent { get; set; }
    public int ChargeID { get; set; }
    public virtual Charge Charge { get; set; }
}


public class Charge
{
    public int ChargeID { get; set; }         
    public virtual ChargeType ChargeType { get; set; }
    public int ChargeTypeID { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<ChargeContract> ChargeContracts { get; set; }
    public virtual Company Company { get; set; }
    public virtual int? CompanyID { get; set; }
    public virtual IEnumerable<ContractParentItem> ContractParentItems { get; set; }
    public virtual IEnumerable<ContractChildItem> ContractChildItems { get; set; }
}
公共类ContractParent
{
public int ContractParentID{get;set;}
公共字符串名称{get;set;}
公共字符串冗余{get;set;}
公共int位置{get;set;}
公共bool默认包含{get;set;}
公共虚拟IEnumerable ContractChilds{get;set;}
公共虚拟bool只有一个child{get;set;}
}
公共类ContractParentItem
{
public int ContractParentItemID{get;set;}
公共虚拟int-ContractParentID{get;set;}
公共虚拟契约父契约父{get;set;}
public int ChargeID{get;set;}
公共虚拟费用{get;set;}
}
公共课收费
{
public int ChargeID{get;set;}
公共虚拟ChargeType ChargeType{get;set;}
public int ChargeTypeID{get;set;}
[必需]
公共字符串名称{get;set;}
公共虚拟ICollection{get;set;}
公共虚拟公司公司{get;set;}
公共虚拟int?CompanyID{get;set;}
公共虚拟IEnumerable ContractParentItems{get;set;}
公共虚拟IEnumerable ContractChildItems{get;set;}
}
当我尝试使用ChargeID=687访问费用时:

Charge.ContractParentItem为空

但事实并非如此

查看SQL中的my表ContractParentItem

有一个实体: ContractParentItemID=1 ContractParentID=8 ChargeID=687

我知道我错过了一些东西

public class Proposals : DbContext
    {    
        public DbSet<Charge> Charges { get; set; }            
        public DbSet<ContractParent> ContractParents { get; set; }
        public DbSet<ContractParentItem> ContractParentItems { get; set; }      
    }
公共类提案:DbContext
{    
公共数据库集费用{get;set;}
公共数据库集{get;set;}
公共数据库集ContractParentItems{get;set;}
}
而不是

public virtual IEnumerable<ContractParentItem> ContractParentItems { get; set; }
公共虚拟IEnumerable ContractParentItems{get;set;} 你应该

public virtual ICollection<ContractParentItem> ContractParentItems { get; set; }
公共虚拟ICollection ContractParentItems{get;set;}
您能介绍一下您是如何将类映射到数据库的吗?谢谢,您能解释一下IEnumerable的错误吗@WiktorZychla
IEnumerable
不支持添加/删除单个对象,而
ICollection
支持添加/删除单个对象。我也不确定EF是否可以使用
IEnumerable
推断出对象之间的关系(尽管我不确定)。如果希望确保映射正确工作(而不是依赖EF推断),也可以使用Fluent API