【发布时间】:2019-07-16 05:44:14
【问题描述】:
我正在使用带有流畅 API 的 ef 核心在两个实体之间创建一对多关系,但它会引发错误
列名“UploadAttemptStatusId”无效。
我尝试过使用数据注释属性以及.HasForeignKey 方法。
public class UploadAttempts : BaseEntity
{
public Guid UploadedAttemptId { get; set; }
public string ClientFileName { get; set; }
public DateTime CreationDateTimeUtc { get; set; }
public Guid UploadingUserId { get; set; }
public int UploadAttemptStatusId { get; set; }
public virtual UploadAttemptStatusDictionary UploadAttemptStatusDictionary { get; set; }
}
public class UploadAttemptStatusDictionary : BaseEntity
{
public int UploadAttemptStatusId { get; set; }
public string Description { get; set; }
public virtual ICollection<UploadAttempts> UploadAttempts { get; set; }
}
public void Map(ModelBuilder modelBuilder)
{
var entity = modelBuilder.Entity<UploadAttemptStatusDictionary>();
//set table name
entity.ToTable("Upload_attempt_status_dictionary");
entity.Property(t => t.UploadAttemptStatusId).HasColumnName("Upload_attempt_status");
entity.HasKey(t => t.UploadAttemptStatusId);
entity.Property(t => t.Description).HasColumnName("description").IsRequired();
entity.HasMany(t => t.UploadAttempts).WithOne(t=>t.UploadAttemptStatusDictionary);
}
public void Map(ModelBuilder modelBuilder)
{
var entity = modelBuilder.Entity<UploadAttempts>();
//set table name
entity.ToTable("Upload_attempts");
entity.Property(t => t.UploadedAttemptId).HasColumnName("upload_attempt_id");
entity.HasKey(t => t.UploadedAttemptId);
entity.Property(t => t.ClientFileName).HasColumnName("client_filename");
entity.Property(t => t.UploadingUserId).HasColumnName("uploading_user_id");
entity.Property(t => t.CreationDateTimeUtc).HasColumnName("creation_datetime_utc");
entity.HasOne<UploadAttemptStatusDictionary>(t => t.UploadAttemptStatusDictionary)
.WithMany(t => t.UploadAttempts)
.HasForeignKey(t => t.UploadAttemptStatusId);
}
【问题讨论】:
-
哪里出现错误?您在两个表中都有 UploadAttemptStatusId。也许例外是关于另一个表。
-
从第一张地图中删除
entity.HasMany(t => t.UploadAttempts).WithOne(t=>t.UploadAttemptStatusDictionary);行。应在一处配置关系以避免冲突的映射。还要确保模型和数据库同步(如果你这样做Add-Migration,它应该是空的。并且应该应用所有当前的迁移。)
标签: entity-framework-core ef-fluent-api