如何同时创建一个外键和主键的字段

时间:2014-01-26 13:30:04

标签: c# .net entity-framework ef-code-first

我的数据库中有3个实体:

  • 用户(Id,Name,IdRole)
  • 合作伙伴(Id_User,ExpiredDate)
  • 部门(Id_User,前缀)

根据IdRoleUser表中的某些记录可以包含PartnerDepartment表中的一些其他数据。

所以,我想创建关系User.Id => Partner.Id_UserUser.Id => Department.Id_User

Partner.Id_UserDepartment.Id_User必须是没有同一身份的外键和主键。

我试过两种方式:

  1. 属性

    public class Partner
    {
        [Key]
        public virtual User Id { get; set; }
    
        public DateTime ExpiredDate { get; set; }
    }
    
    public class Department
    {
        [Key]
        public virtual User Id { get; set; }
    
        public string Prefix { get; set; }
    }
    
    public class User 
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Role IdRole { get; set; }
    }
    
  2. 导致以下错误:

      

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

         

    Entity.Entity.Partner :: EntityType'Partner'没有定义键。定义此EntityType的密钥。

         

    Entity.Entity.Department :: EntityType'Department'没有定义键。定义此EntityType的密钥。

         

    合作伙伴:EntityType:EntitySet“合作伙伴”基于未定义键的“合作伙伴”类型。

         

    Department:EntityType:EntitySet'Department'基于没有定义键的'Department'类型。

    1. 我尝试过使用流畅的API

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
          modelBuilder.Entity<Department>().HasOptional(f => f.Id).WithRequired(s => s.Department);
          modelBuilder.Entity<Partner>().HasOptional(f => f.Id).WithRequired(s => s.Partner);
          base.OnModelCreating(modelBuilder);
      }
      
    2. 错误消息相同。

      那么,如何使用Code-First创建这样的表和关系?

1 个答案:

答案 0 :(得分:2)

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

    public User User { get; set; }

    public DateTime ExpiredDate { get; set; }
}

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

    public User User { get; set; }

    public string Prefix { get; set; }
}