我的应用程序使用了3个相互关联的交叉引用表 - 其中的旧版本已经运行了很长时间。我正在进行重构,并且正处于尝试EF迁移(Auto-6.1.0)并且我被挂断的地步:
为表' RegTypesGroup'指定了多个标识列。只要 每个表允许一个标识列。
我广泛评论了Fluent Mapping文件的各个部分,希望找出导致第二个标识列创建的文件。没有快乐但是当我逐步通过各种选项时,我发现从EF迁移引擎中抛出的错误消息并不真正符合代码的变化。我怀疑是否有错误的否定'。
显然,我的代码中出现错误概率很高 - 而且我没有做任何人的任何好处(例外是我自己的自私)通过违反主键的惯例但我承诺模式:
idTableName
并且已经验证了流利的语法存在。
我需要更好的想法,了解如何从迁移器中哄骗更好的错误消息。
所有东西的根源都是单一的RegType' (登记类型又是选项)
public partial class RegType
{
public int idRegType { get; set; }
public string OptionExplain { get; set; }
public string OptionLabel { get; set; }
public double Price { get; set; }
public int SortOrder { get; set; }
}
和映射:
public RegTypeMap()
{
// Primary Key
HasKey(t => t.idRegType);
// Table & Column Mappings
ToTable("RegType");
Property(t => t.idRegType).HasColumnName("idRegType");
Property(t => t.OptionExplain).HasColumnName("RegTypeExplain");
Property(t => t.OptionLabel).HasColumnName("RegTypeLabel");
Property(t => t.Price).HasColumnName("Price");
Property(t => t.SortOrder).HasColumnName("SortOrder");
}
将各个RegType聚合为离散和定义的组。存在交叉表以将各个RegTeype分组到一个或另一个组中:
public partial class RegTypesXref
{
public int idRegTypesXref { get; set; }
public int idRegTypesGroup { get; set; }
public int idRegType { get; set; }
public virtual RegType RegType { get; set; }
public virtual RegTypesGroup RegTypesGroup { get; set; }
}
public RegTypesXrefMap()
{
// Primary Key
HasKey(t => t.idRegTypesXref);
//// Properties
//// Table & Column Mappings
ToTable("RegTypesXref");
Property(t => t.idRegTypesXref).HasColumnName("idRegTypesXref");
Property(t => t.idRegTypesGroup).HasColumnName("idRegTypesGroup");
Property(t => t.idRegType).HasColumnName("idRegType");
//// Relationships
//fwiw, this commented-out relation worked in legacy but syn-errors on the update.
//this.HasRequired(t => t.RegType)
// .WithMany(t => t.RegTypeXrefs)
// .HasForeignKey(d => d.idRegType);
HasRequired(t => t.RegTypesGroup)
.WithMany(t => t.RegTypesXrefs)
.HasForeignKey(d => d.idRegTypesGroup);
}
因为存在多个组 - 另一个交叉表:
public partial class RegTypesGroupsXref
{
public int idWebinarRegTypesGroup { get; set; }
public int idWebinar { get; set; }
public int idRegTypesGroup { get; set; }
public virtual RegTypesGroup RegTypesGroup { get; set; }
public virtual Webinar Webinar { get; set; }
}
public class RegTypesGroupsXrefMap : EntityTypeConfiguration<RegTypesGroupsXref>
{
public RegTypesGroupsXrefMap()
{
// Primary Key
HasKey(t => t.idWebinarRegTypesGroup);
// Properties
// Table & Column Mappings
ToTable("RegTypesGroupsXref");
Property(t => t.idWebinarRegTypesGroup).HasColumnName("idWebinarRegTypesGroup")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.idWebinar).HasColumnName("idWebinar");
Property(t => t.idRegTypesGroup).HasColumnName("idRegTypesGroup");
// Relationships
HasRequired(t => t.RegTypesGroup)
.WithMany(t => t.RegTypesGroupsXrefs)
.HasForeignKey(d => d.idRegTypesGroup);
//this.HasRequired(t => t.Webinar)
// .WithRequiredDependent(t => t.RegTypesGroup)
// .HasForeignKey(d => d.);
}
}
在实例化单个组的顶级支持下:
public partial class RegTypesGroup
{
public int idRegTypesGroup { get; set; }
public string RegTypesGroupDesc { get; set; }
public int SortOrder { get; set; }
public virtual ICollection<RegTypesGroupsXref> RegTypesGroupsXrefs { get; set; }
public virtual ICollection<RegTypesXref> RegTypesXrefs { get; set; }
}
public RegTypesGroupMap()
{
// Primary Key
HasKey(t => t.idRegTypesGroup);
// Properties
Property(t => t.RegTypesGroupDesc)
.HasMaxLength(50);
// Table & Column Mappings
ToTable("RegTypesGroup");
Property(t => t.idRegTypesGroup).HasColumnName("idRegTypesGroup")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.RegTypesGroupDesc).HasColumnName("RegTypesGroupDesc");
Property(t => t.SortOrder).HasColumnName("SortOrder");
}
}