实体框架中与可为空的外键的一对一关系

时间:2016-10-17 04:26:36

标签: c# entity-framework

我正在尝试在两个表之间创建数据库关系。

我有免费的兑换码。但是一个用户只有一个redem代码。

我创建了两个实体:

public class UserProfile
{
    [Key]
    [ForeignKey("User")]
    public int Id { get; set; }

    //... other fields

    public virtual RedemptionCode RedemptionCode { get; set; }

    public virtual User User { get; set; }
}

public class RedemptionCode
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [ForeignKey("UserProfile")]
    public int? UserProfileId { get; set; }
    public virtual UserProfile UserProfile { get; set; }

    [Required]
    public string Code { get; set; }
}

但是当我添加迁移时,我遇到以下错误:

  

在模型生成期间检测到一个或多个验证错误:

     

RedemptionCode_UserProfile_Source ::多重性在关系'RedemptionCode_UserProfile'中的角色'RedemptionCode_UserProfile_Source'中无效。由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为'*'。

我真正想要的是什么?我想在db中存储免费的redem代码,并将其中一个链接到我系统中的新用户。

1 个答案:

答案 0 :(得分:0)

以下是string c = "%"; c = comboBox1.Text; int a; a = Convert.ToInt32(textBox1.Text); a = int.Parse(textBox1.Text); SqlCommand cmd = new SqlCommand("select * from Person where ( PER_ID = '" + a + "' and GOV_NAME_AR = '" + c + "') ", con); cmd.CommandTimeout = 600; con.Open(); SqlDataReader rdr = cmd.ExecuteReader(); if (rdr.HasRows) { // MessageBox.Show("Successfully found Data"); // SqlDataReader DR = cmd.ExecuteReader(); BindingSource source = new BindingSource(); dataGridView1.DataSource = source; } else { MessageBox.Show("data not found"); } con.Close();

的正确代码
UserProfile

您必须将public class RedemptionCode { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key,ForeignKey("UserProfile")] public int Id { get; set; } public int? UserProfileId { get; set; } [ForeignKey("UserProfile")] public virtual UserProfile UserProfile { get; set; } [Required] public string Code { get; set; } } 从属性ForeignKey移动到导航属性UserProfileId,并通过添加UserProfile属性来指示UserProfile是关系中的主体ForeignKey

Id