以下是我的数据库关系的样子
如果我使用现有数据库生成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方法中的两个类中的虚拟属性和流畅的语法来解决此问题。看起来关系在对象之间不起作用。
感谢