【问题标题】:How to make a field which will be foreign key and primary key at the same time如何创建一个同时作为外键和主键的字段
【发布时间】:2014-01-26 13:30:04
【问题描述】:

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

  • 用户(ID、姓名、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; }
    }
    

它会导致以下错误:

在模型生成过程中检测到一个或多个验证错误:

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

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

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

部门: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);
    }
    

错误信息是一样的。

那么,我怎样才能使用 Code-First 来制作这样的表格和关系呢?

【问题讨论】:

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


    【解决方案1】:
    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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2017-03-24
      相关资源
      最近更新 更多