所以在这里工作时我们决定停止使用edmx并开始使用Code First,主要是因为一遍又一遍地合并edmx文件的问题 .

使用文件 - >新项目 - > Ado.Net实体数据模型我已经从我们现有的数据库中创建了模型,但是当运行一些代码时我得到了这个错误,我已经搜索但是无法弄清楚他们先说的是什么,错误行324,343在生成的DBContext中既不存在也不存在 .

这应该只是开箱即用......

ERROR(3015):从第324,343行开始映射片段中的问题:从表SubModulesCurricularUnitsAcademicYear(ModuleId,SubModuleId)到表SubModule(Id,ModuleId)的外键约束'SubModule_SubModulesCurricularUnitsAcademicYears'::映射不足:必须将外键映射到一些在概念方面参与外键关联的AssociationSet或EntitySets . 错误(3015):从第99,135行开始映射片段中的问题:表PlanStudiesCurricularUnitsAcademicYear(PlanStudyId,CurricularUnitId)中的外键约束'PlanStudiesCurricularUnit_PlanStudiesCurricularUnitsAcademicYears'到表PlanStudiesCurricularUnit(CurricularUnitId,PlanStudyId)::映射不足:外键必须映射到某些在概念方面参与外键关联的AssociationSet或EntitySets .

CREATE TABLE [dbo].[SubModulesCurricularUnitsAcademicYears] (
    [PlanStudyId]      BIGINT         NOT NULL,
    [CurricularUnitId] BIGINT         NOT NULL,
    [AcademicYearId]   BIGINT         NOT NULL,
    [ModuleId]         BIGINT         NOT NULL,
    [SubModuleId]      BIGINT         NOT NULL,
    [TeacherId]        BIGINT         NOT NULL,

     ....
    CONSTRAINT [PK_SubModulesModulesCurricularUnitsAcademicYear] PRIMARY KEY CLUSTERED ([PlanStudyId] ASC, [CurricularUnitId] ASC, [AcademicYearId] ASC, [ModuleId] ASC, [SubModuleId] ASC, [TeacherId] ASC),
    CONSTRAINT [FK_SubModulesModulesCurricularUnitsAcademicYear_AcademicYears] FOREIGN KEY ([AcademicYearId]) REFERENCES [dbo].[AcademicYears] ([Id]),
    CONSTRAINT [FK_SubModulesModulesCurricularUnitsAcademicYear_CurricularUnits] FOREIGN KEY ([CurricularUnitId]) REFERENCES [dbo].[CurricularUnits] ([Id]),
    CONSTRAINT [FK_SubModulesModulesCurricularUnitsAcademicYear_PlanStudies] FOREIGN KEY ([PlanStudyId]) REFERENCES [dbo].[PlanStudies] ([Id]),
    CONSTRAINT [FK_SubModulesModulesCurricularUnitsAcademicYear_SubModules] FOREIGN KEY ([SubModuleId], [ModuleId]) REFERENCES [dbo].[SubModules] ([Id], [ModuleId]),
    CONSTRAINT [FK_SubModulesModulesCurricularUnitsAcademicYear_Users] FOREIGN KEY ([TeacherId]) REFERENCES [dbo].[Users] ([Id])
);




 CREATE TABLE [dbo].[SubModules] (
    [Id]          BIGINT         IDENTITY (1, 1) NOT NULL,
    [ModuleId]    BIGINT         NOT NULL,
    [Name]        NVARCHAR (150) NOT NULL,
    [Description] NVARCHAR (100) NULL,
    [Active]      BIT            CONSTRAINT [DF__SubModule__Activ__7A721B0A] DEFAULT ((1)) NOT NULL,
    [Deleted]     BIT            CONSTRAINT [DF_SubModules_Deleted] DEFAULT ((0)) NOT NULL,
    CONSTRAINT [PK_SubModules] PRIMARY KEY CLUSTERED ([Id] ASC, [ModuleId] ASC),
    CONSTRAINT [FK_SubMudules_Modules] FOREIGN KEY ([ModuleId]) REFERENCES [dbo].[Modules] ([Id]) ON DELETE CASCADE

生成的数据库上下文:

//onModelCreating only refers to Submodules and SubModulesCurricularUnitsAcademicYears in the following lines
...
protected override void OnModelCreating(DbModelBuilder modelBuilder){
   modelBuilder.Entity<SubModule>()
                .HasMany(e => e.SubModulesCurricularUnitsAcademicYears)
                .WithRequired(e => e.SubModule)
                .HasForeignKey(e => new { e.SubModuleId, e.ModuleId })
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<SubModulesCurricularUnitsAcademicYear>()
                .Property(e => e.ECTS)
                .HasPrecision(5, 2);

}
...

生成的poco's

public partial class SubModulesCurricularUnitsAcademicYear
{
    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long PlanStudyId { get; set; }

    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long CurricularUnitId { get; set; }

    [Key]
    [Column(Order = 2)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long AcademicYearId { get; set; }

    [Key]
    [Column(Order = 3)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long ModuleId { get; set; }

    [Key]
    [Column(Order = 4)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long SubModuleId { get; set; }

    [Key]
    [Column(Order = 5)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long TeacherId { get; set; }

    ...

    public virtual AcademicYear AcademicYear { get; set; }

    public virtual CurricularUnit CurricularUnit { get; set; }

    public virtual PlanStudy PlanStudy { get; set; }

    public virtual SubModule SubModule { get; set; }

    public virtual User User { get; set; }
}


public partial class SubModule
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public SubModule()
    {
        SubModulesCurricularUnitsAcademicYears = new HashSet<SubModulesCurricularUnitsAcademicYear>();
    }

    [Key]
    [Column(Order = 0)]
    public long Id { get; set; }

    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long ModuleId { get; set; }

    ...


    public virtual Module Module { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<SubModulesCurricularUnitsAcademicYear> SubModulesCurricularUnitsAcademicYears { get; set; }
}