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