简体   繁体   English

一对一关系Entity Framework外键映射

[英]One to one relationship Entity Framework foreign key mapping

I am working on assigning a relationship between two objects but I am getting an error on the mapping. 我正在分配两个对象之间的关系,但在映射上遇到错误。

I have the following objects: 我有以下对象:

public abstract class EntityBase : IEntity
{
    public int Id { get; set; }
}

public class ManagerUser : EntityBase
{
    public string UserCode { get; set; }
    public string Title { get; set; }
    public virtual Staff StaffDetails { get; set; }
}

public class Staff : EntityBase
{
    public string UserCode { get; set; }
    public string DOB { get; set; }
}

public class ManagerUserMap : EntityMapBase<ManagerUser>
{
    protected override void SetupMappings()
    {
        base.SetupMappings();
        //this.HasKey(t => t.UserCode);
        this.ToTable("ManagerUsers");
        this.Property(t => t.Id).HasColumnName("ManagerUsersID")
        .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
        this.Property(t => t.Title).HasColumnName("txtTitle");
        this.HasRequired(x => x.StaffDetails)
            .WithMany()
            .HasForeignKey(x => x.UserCode);
    }
}

public class StaffMap : EntityMapBase<Staff>
{
    protected override void SetupMappings()
    {
        base.SetupMappings();
        //this.HasKey(t => t.UserCode);
        this.ToTable("TblStaff");
        this.Property(t => t.Id).HasColumnName("StaffID")
        .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
        this.Property(t => t.UserCode).HasColumnName("User_Code");
        this.Property(t => t.DateOfBirth).HasColumnName("dob");
    }
}

I am getting the following error: 我收到以下错误:

The type of property 'UserCode' on entity 'ManagerUser' does not match the type of property 'Id' on entity 'Staff' in the referential constraint 'ManagerUser_StaffDetails' 实体'ManagerUser'上属性'UserCode'的类型与引用约束'ManagerUser_StaffDetails'中实体'Staff'上属性'Id'的类型不匹配

I have searched around and failed to find a solution to get it to compare the the foreign key in ManagerUser with the UserCode property in Staff instead of the ID property. 我四处搜寻,但未能找到解决方案,无法将ManagerUser的外键与StaffUserCode属性(而不是ID属性)进行比较。

Your keys are a bit messed up in the fluent config, HasKey sets the primary key for the entity. 您的键在流畅的配置中有些混乱,HasKey设置实体的主键。 Below I have set the primary key to be Id for both entities. 下面,我将两个实体的主键设置为ID。 Then use the Usercode as a FK: 然后将用户代码用作FK:

    public class ManagerUserMap : EntityMapBase<ManagerUser>
    {
        protected override void SetupMappings()
        {
            base.SetupMappings();
            this.HasKey(t => t.Id);
            this.ToTable("ManagerUsers");
            this.Property(t => t.Id).HasColumnName("ManagerUsersID")
            .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
            this.Property(t => t.Title).HasColumnName("txtTitle");
            this.HasRequired(x => x.StaffDetails)
                .WithMany()
                .HasForeignKey(x => x.UserCode);
        }
    }

    public class StaffMap : EntityMapBase<Staff>
    {
        protected override void SetupMappings()
        {
            base.SetupMappings();
            this.HasKey(t => t.Id);
            this.ToTable("TblStaff");
            this.Property(t => t.Id).HasColumnName("StaffID")
            .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
            this.Property(t => t.UserCode).HasColumnName("User_Code");
            this.Property(t => t.DateOfBirth).HasColumnName("dob");
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM