我目前在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