如何在我的代码中首先使用现有数据库创建关系

时间:2012-11-15 10:31:53

标签: asp.net-mvc-3 visual-studio-2010 c#-4.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; }
}

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

2 个答案:

答案 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中有一些孩子。