У меня возникла странная проблема с EF Core 1.1. Я пытаюсь создать приложение, где некоторые объекты могут быть помечены, поэтому я создал абстрактный общий класс для списка таблиц связей. Проблема в том, что, похоже, EF не поддерживают наличие общих абстрактных классов, в которых работает FK (свойство Id).Ядро Entity Framework не поддерживает общие абстрактные объекты с отношением Meny2Meny?
Вот модели:
public abstract class TaggedEntityBase<T> : EntityBase
{
public ICollection<T> EntityTags { get; set; }
public List<Tag> Tags { get { return EntityTags?.Select(x => x.Tag).ToList(); } }
}
public class AddressTag
{
public long TagId { get; set; }
public Tag Tag { get; set; }
public long EntityId { get; set; }
public Address Entity { get; set; }
}
public class Address : TaggedEntityBase<AddressTag>
{
public string Street { get; set; }
public string City { get; set; }
}
public class Tag : EntityBase
{
public string Name { get; set; }
public virtual ICollection<AddressTag> AddressTags { get; set; }
}
Типового Builder Отображение:
public DbSet<Address> Addresses { get; set; }
public DbSet<AddressTag> AddressTag { get; set; }
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AddressTag>()
.ToTable("AddressTag");
modelBuilder.Entity<AddressTag>()
.HasKey(t => new { t.EntityId, t.TagId });
modelBuilder.Entity<AddressTag>()
.HasOne(pt => pt.Entity)
.WithMany(p => p.EntityTags)
.HasForeignKey(p => p.EntityId);
modelBuilder.Entity<AddressTag>()
.HasOne(pt => pt.Tag)
.WithMany(p => p.AddressTags)
.HasForeignKey(p => p.TagId);
}
Там ошибка, когда EF пытается принести Теги
Необработанного исключения типа «System .Data.SqlClient.SqlException 'произошел в Microsoft.EntityFrameworkCore.dll Дополнительная информация: Недопустимое имя столбца' AddressId '.
У меня даже нет этого удостоверения личности.
Примечание: когда я размещаю явно public ICollection<AddressTag> EntityTags { get; set; }
внутри Адрес POCO, то он отлично работает, включая EntityTags.Tag тоже. Спасибо за любую помощь :)
Если бы похож вопрос – miechooy
Образец является неполным. 'EntityBase' класс отсутствует, и' public List Tags {get {return EntityTags? .Select (x => x.Tag) .ToList(); }} 'не компилируется (отсутствует ограничение на' T'). Не могли бы вы обновить сообщение с недостающими частями, чтобы сделать его воспроизводимым? –