【发布时间】:2017-12-01 04:54:52
【问题描述】:
我正在尝试使用代码优先 EF6 从数据库复制 M-M 关系,但没有运气。我从这里尝试了一些教程链接和一些答案,但仍然得到同样的错误。
这只是我尝试过的一些东西:
https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application
http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx
relationship problems in EF code-first
错误:实体类型 'AdjustmentType' 和 'AdjustmentReason' 不能共享表 'AdjustmentReason' 因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系和匹配的主键他们。
谢谢!
[Serializable]
[Table("schema.AdjustmentReason")]
public class AdjustmentType : AuditableEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AdjustmentTypeId { get; set; }
[Column("AdjustmentType")]
[StringLength(50)]
public string AdjustmentType1 { get; set; }
public virtual ICollection<AdjustmentReasonType> AdjustmentReasonType { get; set; }
}
[Serializable]
[Table("schema.AdjustmentReason")]
public class AdjustmentReason : AuditableEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AdjustmentReasonId { get; set; }
[Column("AdjustmentReason")]
[StringLength(50)]
public string AdjustmentReason1 { get; set; }
public bool? Hidden { get; set; }
public ICollection<Transaction> Transactions { get; set; }
public virtual ICollection<AdjustmentReasonType> AdjustmentReasonType { get; set; }
}
public class AdjustmentReasonType : AuditableEntity
{
public int AdjustmentReasonTypeId { get; set; }
public int AdjustmentReasonId { get; set; } //This is required
public int AdjustmentTypeId { get; set; } //This is optional
public virtual AdjustmentType AdjustmentType { get; set; }
public virtual AdjustmentReason AdjustmentReason { get; set; }
}
//DatabaseContext.cs
modelBuilder.Entity<AdjustmentReason>()
.HasMany(e => e.AdjustmentReasonTypes)
.WithRequired(e => e.AdjustmentReason);
modelBuilder.Entity<AdjustmentType>()
.HasMany(e => e.AdjustmentReasonType)
.WithRequired(e => e.AdjustmentType);
//IDatabaseContext.cs
IDbSet<AdjustmentReason> AdjustmentReasons { get; set; }
IDbSet<AdjustmentType> AdjustmentTypes { get; set; }
IDbSet<AdjustmentReasonType> AdjustmentReasonTypes { get; set; }
【问题讨论】:
-
对我来说看起来不错,除非您的第一个
modelBuilder有错字,认为应该是AdjustmentReasonType,而在HasManylambda 中没有s。 -
感谢 Ivan 在
AdjusmentReason中进行了修复,以便集合名称读取时没有s
标签: c# asp.net-mvc entity-framework code-first ef-fluent-api