EF约定和标识列

时间:2014-04-05 20:00:39

标签: entity-framework-5

我的应用程序使用了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");
    }
}

0 个答案:

没有答案