繁体   English   中英

一对一关系Entity Framework外键映射

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

我正在分配两个对象之间的关系,但在映射上遇到错误。

我有以下对象:

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");
    }
}

我收到以下错误:

实体'ManagerUser'上属性'UserCode'的类型与引用约束'ManagerUser_StaffDetails'中实体'Staff'上属性'Id'的类型不匹配

我四处搜寻,但未能找到解决方案,无法将ManagerUser的外键与StaffUserCode属性(而不是ID属性)进行比较。

您的键在流畅的配置中有些混乱,HasKey设置实体的主键。 下面,我将两个实体的主键设置为ID。 然后将用户代码用作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