Использование Entity Framework проблемы множественных отношений - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь узнать, как использовать Entity Framework, и я застрял на чем-то, из-за чего я запутался.

Я пытаюсь создать базу данных из 4 таблиц, которые должны иметь отношения, каждая из которыхДругой.И у меня проблемы с этим (сообщение об ошибке показано ниже).

[Table("VERSION")]
public partial class Version
{
        public Version()
        {            
            O2cmoduls = new HashSet<O2cmodul>();
        }

        [Key]
        [Column("VERSID")]
        public int VersId { get; set; }

        public virtual ICollection<O2cmodul> O2cmoduls { get; set; }
}

[Table("O2CMODUL")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Justification = "Suppressed by Entity Framework")]
public class O2cmodul
{
            public O2cmodul()
            {
                O2cmodulProducts = new HashSet<O2cmodulProduct>();
            }

            [Key]       
            [Column("VERSID",Order =1)]
            public int VersId { get; set; }

            [Key]
            [Column("MODULID",Order =2)]
            [StringLength(15)]
            public string ModulId { get; set; }

            [Column("MODULTEXT")]
            public string ModulText { get; set; }

            [ForeignKey("VersId")]
            public virtual Version Version { get; set; }        

            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Suppressed by Entity Framework")]
            public virtual ICollection<O2cmodulProduct> O2cmodulProducts { get; set; }
}

[Table("O2CMODUL_PRODUCT")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Justification = "Suppressed by Entity Framework")]
public class O2cmodulProduct
{
        public O2cmodulProduct()
        {
            O2cmodulNutzungs = new HashSet<O2cmodulNutzung>();
        }

        [Key]
        [Column("VERSID",Order =1)]
        public int VersId { get; set; }

        [Key]
        [Column("MODULIDMODULID",Order = 2)]
        [StringLength(15)]
        public string ModulId { get; set; }

        [Key]
        [Column("PRODUCTID",Order = 3)]
        [StringLength(15)]
        public string ProductId { get; set; }

        [Column("PRODUCTTEXT")]
        [StringLength(60)]
        public string ProductText { get; set; }

        [ForeignKey("VersId")]
        public virtual Version Version { get; set; }
        [ForeignKey("ModulId")]
        public virtual O2cmodul O2cmodul { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Suppressed by Entity Framework")]
        public virtual ICollection<O2cmodulNutzung> O2cmodulNutzungs { get; set; }
}

[Table("O2CMODUL_NUTZUNG")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Justification = "Suppressed by Entity Framework")]
public class O2cmodulNutzung
{
        [Key]
        [Column("VERSID",Order = 1)]
        public int VersId { get; set; }

        [Key]
        [Column("MODULID",Order = 2)]
        [StringLength(15)]
        public string ModulId { get; set; }

        [Key]
        [Column("PRODUCTID", Order = 3)]
        [StringLength(15)]
        public string ProductId { get; set; }

        [Key]
        [Column("NUTZUNGSSZENARIO", Order = 4)]
        [StringLength(30)]
        public string UseScenario { get; set; }

        [Column("SWITCHON")]
        public string SWITCHON { get; set; }       

        [Column("QTD_CUTOMIZED")]
        public int QTDCustomized { get; set; }

        [ForeignKey("VersId")]
        public virtual Version Version { get; set; }
        [ForeignKey("ModulId")]
        public virtual O2cmodul O2cmodul { get; set; }
        [ForeignKey("ProductId")]
        public virtual O2cmodulProduct O2cmodulProduct { get; set; }

}

Неверный код - я попытался отобразить его так:

public class DatabaseContext : DbContext
{
        public virtual DbSet<O2cmodul> O2cmoduls { get; set; }
        public virtual DbSet<O2cmodulProduct> O2cmodulProducts { get; set; }
        public virtual DbSet<O2cmodulNutzung> O2cmodulNutzungs { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //#region[Version]
            //modelBuilder.Entity<Version>()
            //   .HasOptional(e => e.O2cmoduls)
            //  .WithRequired(e => e.VersionID)
            //  .Map(e => e.MapKey(VERSID));
            //#endregion

            //#region [O2cmodul]

        //modelBuilder.Entity<O2cmodul>()
        //   .HasOptional(e => e.O2cmodulProduct)
        //   .WithRequired(e => e.VersionID)
        //   .Map(e => e.MapKey(VERSID));

        //modelBuilder.Entity<O2cmodul>()
        //   .HasOptional(e => e.O2cmodulProduct)
        //   .WithRequired(e => e.ModulID)
        //   .Map(e => e.MapKey(MODULID));

        //#endregion

        //#region [O2cmodulProduct]

        //modelBuilder.Entity<O2cmodulProduct>()
        //  .HasOptional(e => e.O2cmodulNutzung)
        //  .WithRequired(e => e.VersionID)
        //  .Map(e => e.MapKey(VERSID));

        //modelBuilder.Entity<O2cmodulProduct>()
        //   .HasOptional(e => e.O2cmodulNutzung)
        //   .WithRequired(e => e.ModulID)
        //   .Map(e => e.MapKey(MODULID));

        //modelBuilder.Entity<O2cmodulProduct>()
        //   .HasOptional(e => e.O2cmodulNutzung)
        //   .WithRequired(e => e.ProductID)
        //   .Map(e => e.MapKey(PRODUCTID));

        //#endregion
        }
}

Вот структура:

Существующая таблица [Version] в базе данных

VersId int (PK)

Таблица [O2cmodul]

VersId int (PK,FK)
ModulId string (PK)
ModulText string

Таблица [O2cmodulProduct]

VersId int (PK,FK)
ModulId string (PK,FK)
ProductId string (PK)
ProductText string

Таблица [O2cmodulNutzung]:

VersId int (PK,FK)
ModulId string (PK,FK)
ProductId string (PK,FK)
UseScenario string (PK)
switchon string
QTDcutomized int

Отношения:

[Version] 1:n [O2cmodul] 1:n [O2cmodulProduct] 1:n [O2cmodulNutzung]

И я получаю эту ошибку:

enter image description here

Одна или несколько ошибок проверки были обнаружены при создании модели:

O2cmodulProduct_O2cmodul_Target_O2cmodulProduct_O2cmodul_Source:: число свойств в зависимых и главных ролях в ограничении отношений должно быть идентичным.количество свойств в зависимых и основных ролях в ограничении отношений должно быть одинаковым.

O2cmodulNutzung_O2cmodulProduct_Target_O2cmodulNutzung_O2cmodulProduct_Source:: количество свойств вЗависимые и главные роли в ограничении отношений должны быть идентичны.

Надеюсь, это не смущает.

Спасибо за помощь.

...