【问题标题】:error 0019: Each property name in a type must be unique on ID field错误 0019:类型中的每个属性名称在 ID 字段上必须是唯一的
【发布时间】:2011-10-03 21:44:23
【问题描述】:

已回答!(很快就会发布。我真的认为这是 EF 中的一个错误。)

我有以下一组(代码优先)类,它们将成为应用程序的未来,因为我们正在替换旧的(从 db 生成)。 dbcontext、两个映射/配置、两个 POCO 和一个基类。

除此之外,另一个项目中完全是从数据库生成的 edmx。到现在为止,这两者的冲突还没有出现任何问题。上下文中还有其他几个不相关的集合(未显示),但直到我开始尝试了解SalesRepsSalesGroups 之间的关系,我才开始遇到问题。注释掉在OnModelCreating 中添加SalesGroupMapping 将允许它运行。

错误

Schema specified is not valid. Errors:
(19,6) : error 0019: Each property name in a type must be unique. Property name 'PKID_MasterRepGroup' was already defined.
(27,6) : error 0019: Each property name in a type must be unique. Property name 'PKID_MasterRepGroup' was already defined.

守则:

public class MyDbContext{
public IDbSet<SalesGroup> SalesGroups { get; set; }


            public IDbSet<SalesRep> SalesReps { get; set; }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
                        {
                            modelBuilder.Configurations.Add(new InsuranceProviderMapping());
                            modelBuilder.Configurations.Add(new SalesGroupMapping());
                            modelBuilder.Configurations.Add(new SalesRepMapping());
                            base.OnModelCreating(modelBuilder);

                        }
}

        class SalesRepMapping : EntityTypeConfiguration<SalesRep>
            {
                public SalesRepMapping()
                {
                    ToTable("SalesRep");
                    Property(p => p.Id).HasColumnName("PKID_SalesRep");

                    Property(p => p.Email).HasColumnName("EMailAddress1");

                    Property(p => p.Address.Address1).HasColumnName("Address");
                    Property(p => p.Address.Address2).HasColumnName("Address2");
                    Property(p => p.Address.City).HasColumnName("City");
                    Property(p => p.Address.State).HasColumnName("State");
                    Property(p => p.Address.Zipcode).HasColumnName("Zipcode");
                    //Property(p => p.SalesGroupId).HasColumnName("FK_MasterRepGroup");
                    //HasRequired(p => p.SalesGroup).WithMany(c => c.SalesReps).HasForeignKey(b => b.SalesGroupId);

                    //Note: dropping emailaddress2
                }
            }

            class SalesGroupMapping : EntityTypeConfiguration<SalesGroup>
                {
                    public SalesGroupMapping()
                    {
                        ToTable("MasterRepGroup");
                        Property(p => p.Id).HasColumnName("PKID_MasterRepGroup");
                        Property(p => p.Name).HasColumnName("CompanyName");
                        Property(p => p.PrimaryContact.FirstName).HasColumnName("Contact1FirstName");
                        Property(p => p.PrimaryContact.LastName).HasColumnName("Contact1LastName");
                        Property(p => p.PrimaryContact.Phone).HasColumnName("Contact1Phone");
                        Property(p => p.PrimaryContact.Fax).HasColumnName("Contact1Fax");
                        Property(p => p.PrimaryContact.Email).HasColumnName("Contact1EMail");
                        Property(p => p.SecondaryContact.FirstName).HasColumnName("Contact2FirstName");
                        Property(p => p.SecondaryContact.LastName).HasColumnName("Contact2LastName");
                        Property(p => p.SecondaryContact.Phone).HasColumnName("Contact2Phone");
                        Property(p => p.SecondaryContact.Fax).HasColumnName("Contact2Fax");
                        Property(p => p.SecondaryContact.Email).HasColumnName("Contact2EMail");
                        Property(p => p.Address.Address1).HasColumnName("Address");
                                    Property(p => p.Address.Address2).HasColumnName("Address2");
                        Property(p => p.Address.City).HasColumnName("City");
                        Property(p => p.Address.State).HasColumnName("State");
                        Property(p => p.Address.Zipcode).HasColumnName("Zipcode");
                    }
                }

    public class SalesRep: Entity
        {

            virtual public string FirstName { get; set; }
            [Required]
            public string LastName { get; set; }
            [Phone]
            virtual public string Phone { get; set; }
            [Phone]
            virtual public string Fax { get; set; }
            [Email]
            virtual public string Email { get; set; }
            virtual public string Notes { get; set; }

            virtual public Address Address { get; set; }

            //public long SalesGroupId { get; set; }

            //[Required]
            ////[ForeignKey("SalesGroupId")]
            //virtual public SalesGroup SalesGroup { get; set; }
        }

public class SalesGroup : Entity
    {
        public SalesGroup()
        {
            //SalesReps = new List<SalesRep>();
        }

        [Required]
        public string Name { get; set; }

        virtual public Address Address { get; set; }
        virtual public Contact PrimaryContact { get; set; }
        virtual public Contact SecondaryContact { get; set; }

        //virtual public ICollection<SalesRep> SalesReps {get; set;}
    }

        public abstract class Entity : NMTC.Core.DataContracts.IEntity
            {

                // TODO database columns will eventually be int instead of bigint
                public long Id { get; set; }
        }
        }

有什么想法吗?自周五以来,我一直在努力解决这个问题。如果您知道我可以追踪它的想法的方法,那也会有所帮助。

非常感谢。

更多信息:

单独注释掉 Id 属性的映射将允许创建模型。不过,这实际上对长期没有帮助。

【问题讨论】:

    标签: entity-framework-4.1 ef-code-first


    【解决方案1】:

    错误是 EF 的问题。

    在映射中,我映射Property(p=&gt;p.Id).HasColumnName("MyId");

    在继承自 Entity 类的 Contact 类中,也有 ID。

    因为我没有明确地映射这些列,映射“涓涓细流”并试图以同样的方式映射我的Contact.Id 属性。

    解决方案:

    a) 明确映射它们

    b) 移除继承,使Contact 不是Entity 类型,而是ComplexType(没有ID。)

    【讨论】:

    • 请详细说明。我同意该类被错误地映射,但错误不匹配。我不认为它应该默认为 p.Id 使用 p.Contact.Id 的映射。 “PrimaryContact_Id 列无效/不存在”错误更有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2022-06-25
    • 2021-11-23
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多