我的项目是Database First,我使用的是 Entity Framework 6.2.0。
所以我在简单的插图中有以下类:
Person [1] [n] Link_Table [n] [1] Area
====== ========== ====
ID ID ID
PersonID (FK)
AreaID (FK)
现在,当使用以下代码时,它会通过我“无效列名'Area2_ID'”的内部异常。
Db_Context db = new Db_Context();
// getting all links with specific "personID"
List<Link_Table> links = db.Link_Table.Where(item => item.PersonID == personID).ToList();
// now getting all areas
List<Area> areas= new List<Area>();
foreach (Link_Table link in links)
{
// ERROR
areas.Add(db.Area.Where(item => item.ID == link.areaID).First());
}
我已经阅读了其他用户关于这个问题的一些信息,问题应该出在(自动生成的)OnModelCreating中。
modelBuilder.Entity<Area>()
.Property(e => e.Description)
.IsUnicode(false);
modelBuilder.Entity<Area>()
.HasOptional(e => e.Area1)
.WithRequired(e => e.Area2);
无论出于何种原因在代码中使用 EF 并创建一个新的区域对象,它不仅会显示“ID”-属性,还会显示“区域 1”-和“区域 2”-属性。
问题 我必须如何处理?“Area1_ID”和“Area2_ID”列仅存在于 EF 中,而不存在于数据库中。我可以删除这些属性或其他东西来防止我的异常吗?
编辑:我的模型:
[Table("Area")]
public partial class Area
{
public Guid ID { get; set; }
[StringLength(40)]
public string Name { get; set; }
[Column(TypeName = "text")]
public string Description{ get; set; }
public virtual Area Area1 { get; set; }
public virtual Area Area2 { get; set; }
}
public partial class Link_Table
{
public Guid ID { get; set; }
public Guid? Person_ID { get; set; }
public Guid? Area_ID { get; set; }
public virtual Person Person{ get; set; }
}
[Table("Person")]
public partial class Person
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Person()
{
Link_Table = new HashSet<Link_Table>();
}
public Guid ID { get; set; }
}