使用复合FK时,来自DB的EF Poco崩溃

时间:2017-03-03 13:09:18

标签: c# entity-framework

以下是我的数据库关系的样子

enter image description here

enter image description here

如果我使用现有数据库生成POCO类。 VS 2015将生成以下课程,

Entity.cs

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

    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int EntityTypeId { get; set; }

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

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

EntityOnlineInformation.cs

 [Table("EntityOnlineInformation")]
    public partial class EntityOnlineInformation
    {
        [Key]
        [Column(Order = 0)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int EntityId { get; set; }

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

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

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

public virtual Entity Entity { get; set; }
}

的DbContext

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
  modelBuilder.Entity<Entity>()
                .HasMany(e => e.EntityOnlineInformation)
                .WithRequired(e => e.Entity)
                .HasForeignKey(e => new { e.EntitytypeId, e.EntityId })
                .WillCascadeOnDelete(false);

         }

使用此代码,当我执行简单的选择linq查询时,我收到异常,它会在下面的异常消息中抱怨。

(473,10) : error 3015: Problem in mapping fragments starting at
 lines 473, 498: Foreign key constraint 'Entity_EntityOnlineInformation'
 from table EntityOnlineInformation (EntityId, EntitytypeId) to table Entity
 (EntityTypeId, EntityId):: Insufficient mapping: Foreign key must be mapped to some
 AssociationSet or EntitySets participating in a foreign key association on the conceptual side.

我没有对创建的poco类和dbcontext进行任何单一更改。我想也许我的数据库关系是错误的但是使用edmx而不是POCO进行测试,一切正常。这是什么问题,我该如何测试呢? 如果我必须扩展OnModelCreating方法,请告知我如何使用元数据在部分类中扩展它。

编辑:我可以通过删除OnModelCreate方法中的两个类中的虚拟属性和流畅的语法来解决此问题。看起来关系在对象之间不起作用。

感谢

0 个答案:

没有答案