实体框架表关系

时间:2013-04-09 12:55:37

标签: c# asp.net entity-framework

简介

  • 我是Entity Framework的新手
  • 我正在使用Code-first

用例

我必须遵循表格

[Table("TBL_UserVariant")]
public class UserVariant
{
    [Key, Column(Order = 0)]
    public int UserId { get; set; }
    [Key, Column(Order = 1)]
    public int VarId { get; set; }
    public string Value { get; set; }
}

[Table("TBL_UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public string eMail { get; set; }
}

我希望TBL_UserProfile引用所有TBL_UserVariant条目的列表,其中TBL_UserProfile :: UserId == TBL_UserVariant :: UserId

以下是我的目标的一个例子

[Table("TBL_UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public string eMail { get; set; }

    public UserVariant[] variants;
}

其中'UserProfile :: variants'应该包含一个项目列表,其中'TBL_UserProfile :: UserId == TBL_UserVariant :: UserId'

问题

使用EF可以直接使用吗?或者,我应该实现一个包装器填充'UserProfile :: variants'〜手动〜?

3 个答案:

答案 0 :(得分:0)

您只需向UserProfile实体添加导航属性即可。

    [Table("TBL_UserProfile")]
    public class UserProfile
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }

        public string eMail { get; set; }
        public virtual ICollection<UserVariant> UserVariants { get; set; }
    }

答案 1 :(得分:0)

以下是您应该需要的。 EF将负责其余部分。

[Table("TBL_UserProfile")]
public class UserProfile
{
    [Key]
    public int UserId { get; set; }
    public string eMail { get; set; }

    public virtual ICollection<UserVariant> Variants { get; set; }
}

[Table("TBL_UserVariant")]
public class UserVariant
{
    [Key]
    public int VarId { get; set; }
    public UserProfile User { get; set; }
    public string Value { get; set; }
}

答案 2 :(得分:0)

我认为你要求的是你想要一个UserProfile,映射到很多UserVariants

在这种情况下,您需要向UserProfile类添加一个集合。

public virtual ICollection<UserVariant> UserVariants { get; set; }

您还需要在UserVariant类上修复[Key]属性,因为我认为它应该在VarId上。然后,您可以只指定导航属性

[Key]
public int VarId { get; set; }
public UserProfile User { get; set; }

修改

顺便说一下,你的命名约定已经到处都是。请勿使用TBL_为表名添加前缀。大写所有属性/列。例如Email不是eMail