0

我曾尝试寻找答案,虽然我确信我的问题已在某处得到解答,但我未能得到答案。我有两个独立但相关的表。我正在处理我在 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; }
}

我对没有或一对多的关系感兴趣,即我可以有一个没有孩子的成年人。儿童类中的childID对应于成人类中的ID。我们在类中没有一个或一个 ID 与子类中的许多 childID 匹配。我如何在课堂上进行建模?我也有兴趣在一个视图中显示这些映射值并编辑、创建和保存更改。

4

2 回答 2

0

就像调用成员一样简单。例如,当您想知道哪些孩子与特定成人相关时,您可以使用如下代码:

var childno = db.adult.child.ChildNo;

或搜索:

string favor = db.adult.child.Find(input.id).Select(s => s.favourite).ToString();

child 模型现在是成人的成员,成人的 ICollection 中可能有一些孩子。

于 2012-11-15T14:03:14.117 回答
0

答案是Entity Framework Code首先通过一些编码自己创建一对一、一对多、多对多等关系。通过使用虚拟属性,您可以在两个模型之间导航,因此将下面的代码添加到您的第一个模型中:

public virtual ICollection<children> children_{ get; set;}

然后在第二个模型中添加:

[Required]
public virtual adult adult_{ get; set;}

这代表了儿童和成人之间的一对多关系。[必需] 确保任何孩子都肯定有父母(成人),因此它不能为空。请注意,无需在当前模型中添加其他模型的关系 ID。所以使用这部分代码一般不使用:

public int childID {get; set;}

如果你想在第二个模型中使用上面的代码,数据库中不会出现导航。必须手动将其安装在控制器中并在您的代码(如控制器)中导航表。但是,通过使用虚拟属性 EF 生成这样的关系键以在模型之间导航。使用此技术后,查看您的表,您会在成人中找到名为 childID 的列由 EF 自动创建的表。

于 2012-11-15T10:50:32.497 回答