实体框架标识列问题

 swa乄ycat曼颜 发布于 2023-02-12 14:22

我目前在EF遇到问题.我有一个现有的数据库,并且有一个名为Profiles 的自定义用户表.用户在下面(我已经删除了大部分属性以便于阅读).

public partial class Profile : IdentityUser
{
    public Profile()
    {
        this.Assets = new List();

        // ...
    }

    public string CompanyId { get; set; }

    // ...

    public virtual Company Company { get; set; }
    public virtual ICollection Assets { get; set; }

    // ...

}

我的DbContext看起来像这样(简化):

public partial class SkipstoneContext : IdentityDbContext
{
    static SkipstoneContext()
    {
        Database.SetInitializer(null);
    }

    public SkipstoneContext()
        : base("DefaultConnection")
    {
    }

    public DbSet Assets { get; set; }

    // ...

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // ...

        modelBuilder.Entity().HasKey(l => l.UserId);
        modelBuilder.Entity().HasKey(r => r.Id);
        modelBuilder.Entity().HasKey(r => new { r.RoleId, r.UserId });
        modelBuilder.Entity().HasKey(r => r.UserName);
    }
}

我有一个看起来像这样的课程:

    public Company()
    {
        this.Assets = new List();
    }

    public string Id { get; set; }
    public string Name { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }
    public System.DateTime DateCreated { get; set; }
    public Nullable DateModified { get; set; }
    public bool Deleted { get; set; }

    public virtual Profile CreatedByProfile { get; set; }
    public virtual ICollection Assets { get; set; }
}

问题是,当我运行我的代码时,我得到一个错误说明:

列名称"CreatedByProfile_Id"无效.

我需要告诉系统我的自定义用户的Id列只是Id.我有一个映射文件:

public class ProfileMap : EntityTypeConfiguration
{
    public ProfileMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.Id)
            .IsRequired()
            .HasMaxLength(128);

        this.Property(t => t.CompanyId)
            .IsRequired()
            .HasMaxLength(128);

        this.Property(t => t.CreatedBy)
            .IsRequired();

        this.Property(t => t.Title)
            .IsRequired();

        this.Property(t => t.Forename)
            .IsRequired();

        this.Property(t => t.Surname)
            .IsRequired();

        this.Property(t => t.Email)
            .IsRequired();

        this.Property(t => t.CredentialId)
            .IsRequired();

        // Table & Column Mappings
        this.ToTable("Profiles");
        this.Property(t => t.Id).HasColumnName("Id");
        this.Property(t => t.CompanyId).HasColumnName("CompanyId");
        this.Property(t => t.CreatedBy).HasColumnName("CreatedBy");
        this.Property(t => t.ModifiedBy).HasColumnName("ModifiedBy");
        this.Property(t => t.DateCreated).HasColumnName("DateCreated");
        this.Property(t => t.DateModified).HasColumnName("DateModified");
        this.Property(t => t.LastLoginDate).HasColumnName("LastLoginDate");
        this.Property(t => t.Title).HasColumnName("Title");
        this.Property(t => t.Forename).HasColumnName("Forename");
        this.Property(t => t.Surname).HasColumnName("Surname");
        this.Property(t => t.Email).HasColumnName("Email");
        this.Property(t => t.JobTitle).HasColumnName("JobTitle");
        this.Property(t => t.Telephone).HasColumnName("Telephone");
        this.Property(t => t.Mobile).HasColumnName("Mobile");
        this.Property(t => t.Photo).HasColumnName("Photo");
        this.Property(t => t.LinkedIn).HasColumnName("LinkedIn");
        this.Property(t => t.Twitter).HasColumnName("Twitter");
        this.Property(t => t.Facebook).HasColumnName("Facebook");
        this.Property(t => t.Google).HasColumnName("Google");
        this.Property(t => t.Bio).HasColumnName("Bio");
        this.Property(t => t.CompanyName).HasColumnName("CompanyName");
        this.Property(t => t.CredentialId).HasColumnName("CredentialId");
        this.Property(t => t.IsLockedOut).HasColumnName("IsLockedOut");
        this.Property(t => t.IsApproved).HasColumnName("IsApproved");
        this.Property(t => t.CanEditOwn).HasColumnName("CanEditOwn");
        this.Property(t => t.CanEdit).HasColumnName("CanEdit");
        this.Property(t => t.CanDownload).HasColumnName("CanDownload");
        this.Property(t => t.RequiresApproval).HasColumnName("RequiresApproval");
        this.Property(t => t.CanApprove).HasColumnName("CanApprove");
        this.Property(t => t.CanSync).HasColumnName("CanSync");
        this.Property(t => t.AgreedTerms).HasColumnName("AgreedTerms");
        this.Property(t => t.Deleted).HasColumnName("Deleted");
        this.Property(t => t.UserName).HasColumnName("UserName");

        // Relationships
        this.HasRequired(t => t.Company)
            .WithMany(t => t.Users)
            .HasForeignKey(d => d.CompanyId);

    }
}

但如果我将其添加到我的DbContext类,我会收到一条错误说明:

已添加"Models.Profile"类型的配置.要引用现有配置,请使用Entity()或ComplexType()方法.

我认为这很容易解决,所以有人能指出我正确的方向吗?

干杯,

/ r3plica

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有