Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架Id列问题_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 实体框架Id列问题

C# 实体框架Id列问题,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,目前我对EF有问题。 我有一个现有的数据库,其中有一个名为Profiles的自定义User表。 用户如下(为了便于阅读,我去掉了大部分属性) 公共部分类配置文件:IdentityUser { 公众简介() { this.Assets=新列表(); // ... } 公共字符串CompanyId{get;set;} // ... 公共虚拟公司公司{get;set;} 公共虚拟ICollection资产{get;set;} // ... } 我的DbContext如下所示(简化): public分

目前我对EF有问题。 我有一个现有的数据库,其中有一个名为Profiles的自定义User表。 用户如下(为了便于阅读,我去掉了大部分属性)

公共部分类配置文件:IdentityUser
{
公众简介()
{
this.Assets=新列表();
// ...
}
公共字符串CompanyId{get;set;}
// ...
公共虚拟公司公司{get;set;}
公共虚拟ICollection资产{get;set;}
// ...
}
我的DbContext如下所示(简化):

public分部类SkipstoneContext:IdentityDbContext
{
静态SkipstoneContext()
{
Database.SetInitializer(null);
}
公共SkipstoneContext()
:base(“默认连接”)
{
}
公共数据库集资产{get;set;}
// ...
}
模型创建时受保护的覆盖无效(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<Asset>();
    }

    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<System.DateTime> DateModified { get; set; }
    public bool Deleted { get; set; }

    public virtual Profile CreatedByProfile { get; set; }
    public virtual ICollection<Asset> Assets { get; set; }
}
上市公司() { this.Assets=新列表(); } 公共字符串Id{get;set;} 公共字符串名称{get;set;} 通过{get;set;}创建的公共字符串 公共字符串由{get;set;}修改 public System.DateTime DateCreated{get;set;} 公共可为空的DateModified{get;set;} 公共bool已删除{get;set;} 公共虚拟配置文件CreatedByProfile{get;set;} 公共虚拟ICollection资产{get;set;} } 问题是,当我运行代码时,会出现一个错误,指出:

列名“CreatedByProfile\u Id”无效

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

public class ProfileMap : EntityTypeConfiguration<Profile>
{
    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);

    }
}
公共类概要映射:EntityTypeConfiguration
{
公共档案地图()
{
//主键
this.HasKey(t=>t.Id);
//性质
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.姓氏)
.IsRequired();
this.Property(t=>t.Email)
.IsRequired();
this.Property(t=>t.CredentialId)
.IsRequired();
//表和列映射
本表为ToTable(“配置文件”);
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.姓氏).HasColumnName(“姓氏”);
this.Property(t=>t.Email).HasColumnName(“Email”);
this.Property(t=>t.JobTitle).HasColumnName(“JobTitle”);
this.Property(t=>t.Telephone).HasColumnName(“电话”);
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(“用户名”);
//关系
此.HasRequired(t=>t.Company)
.WithMany(t=>t.Users)
.HasForeignKey(d=>d.CompanyId);
}
}
但如果我将其添加到DbContext类中,则会出现一个错误,说明:

已添加“Models.Profile”类型的配置。到 引用现有配置,使用实体()或 ComplexType()方法

我想这很容易解决,所以有人能告诉我正确的方向吗

干杯


/r3plica

问题出在您的
公司的
类配置上。
尝试:

如果您没有
公司
的配置类,那么在您的
OnModelCreating
方法中,您需要:

modelBuilder.Entity<Company>().HasRequired(x => x.CreatedByProfile).WithMany().Map(
  x => x.MapKey("CreatedByProfileId"));
更新
因为您的类中已经有了属性

modelBuilder.Entity<Company>().HasRequired(
  x => x.CreatedByProfile).WithMany().HasForeignKey(x => x.CreatedBy);

我认为异常会告诉您使用
OnModelCreating
Entity()
)来更改列
public class CompanyMap : EntityTypeConfiguration<Company>
{
  public CompanyMap()
  {
    // Add this
    this.HasRequired(x => x.CreatedByProfile).WithMany().Map(
      x => x.MapKey("CreatedByProfileId"));

    // CreatedByProfileId is the FK column in the Company table that points
    // to the Profile table. This is my made up name for the column since
    // I don't know the real name in your database.
  }
}
modelBuilder.Entity<Company>().HasRequired(x => x.CreatedByProfile).WithMany().Map(
  x => x.MapKey("CreatedByProfileId"));
modelBuilder.Entity<Company>().HasRequired(
  x => x.CreatedByProfile).WithMany().HasForeignKey(x => x.CreatedBy);