我一直在寻找答案,虽然我确信我的问题已在某处得到解答,但我没有得到答案。 我有两个表独立但相关。我在EF处理我的课程。 我想在c#中创建一个没有或一对多关系的模型。 我如何在代码中执行此操作? 以下是我的两个模型:
public class adult
{
[Key]
public int ID { get; set; }
[StringLength(50, ErrorMessage = "{0} cannot exceed {1} characters")]
public string LastName { get; set; }
public string Initials { get; set; }
public string Title { get; set;}
public string Address1 {get; set;}
public string Address2 {get; set;}
}
以下是第二个带有许多“孩子”的模型。
public class children
{
[Key]
public int childNo { get; set; }
public string favourite { get; set; }
**public int childID { get; set; }**
[Required]
[StringLength(50, ErrorMessage = "{0} cannot exceed {1} characters")]
public string colour { get; set; }
public DateTime DateReceived { get; set; }
public DateTime DatePaid { get; set; }
}
我对没有或一对多的关系感兴趣,即我可以有一个没有孩子的成年人。 children类中的childID对应于成人类中的ID。我们在类中没有或一个ID与子类中的许多childID匹配。我如何在课堂上模拟这个?我也有兴趣在一个视图中显示这些映射值,并编辑,创建和保存更改。
答案 0 :(得分:0)
答案是实体框架代码首先只通过某种编码创建一对一,一对多和多对多的关系。 通过使用虚拟属性,您可以在两个模型之间导航,因此请在第一个模型下添加代码:
public virtual ICollection<children> children_{ get; set;}
然后进入第二个模型添加:
[Required]
public virtual adult adult_{ get; set;}
这代表了儿童与成人之间的一对多关系。 [必需]确保任何孩子肯定有父母(成人),因此不能为空。 请注意,不需要在当前模型中添加其他模型的关系ID。所以通常不使用这部分代码:
public int childID {get; set;}
如果要在第二个模型中使用上述代码,则DB中将不显示导航。必须在控制器中手动挂载它并导航代码中的表,如controller.But,通过使用虚拟属性,EF生成这样的关系键以在模型之间导航。使用此技术后,查看表,您将在成人中找到名为childID的列由EF自动创建的表格。
答案 1 :(得分:0)
就像打电话给会员一样简单。例如,当您想知道哪些孩子与特定成年人有关时,您可以使用以下代码:
var childno = db.adult.child.ChildNo;
或搜索:
string favor = db.adult.child.Find(input.id).Select(s => s.favourite).ToString();
儿童模特现在是成年人的成员,成年人可能在孩子的ICollection中有一些孩子。