Мой проект База данных сначала , и я использую 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 в коде и создавая новый Area-Object, он покажет мне не только "ID" -Property, но также "Area1" - и "Area2" -Property.
Вопрос
Как я должен справиться с этим? Столбцы «Area1_ID» и «Area2_ID» существуют только в EF, но не в базе данных. Могу ли я удалить эти свойства или что-то еще, чтобы предотвратить исключение?
EDIT:
Мои модели:
[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; }
}