Я пытаюсь узнать, как использовать 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]
И я получаю эту ошибку:
Одна или несколько ошибок проверки были обнаружены при создании модели:
O2cmodulProduct_O2cmodul_Target_O2cmodulProduct_O2cmodul_Source:: число свойств в зависимых и главных ролях в ограничении отношений должно быть идентичным.количество свойств в зависимых и основных ролях в ограничении отношений должно быть одинаковым.
O2cmodulNutzung_O2cmodulProduct_Target_O2cmodulNutzung_O2cmodulProduct_Source:: количество свойств вЗависимые и главные роли в ограничении отношений должны быть идентичны.
Надеюсь, это не смущает.
Спасибо за помощь.