Ich habe ein seltsames Problem mit EF Core 1.1 konfrontiert. Ich versuche, eine Anwendung zu erstellen, wo einige Entitäten getaggt werden können, daher habe ich eine abstrakte generische Klasse für die Relationstabellenliste erstellt. Das Problem ist, dass es scheint, als ob EF keine generischen abstrakten Klassen unterstützt, die FK (Id-Eigenschaft) funktioniert.Entity Framework Core unterstützt keine generischen abstrakten Entitäten mit Meny2Meny-Beziehung?
Hier sind Modelle:
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; }
}
Der Model Builder-Mappings:
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);
}
Es ist ein Fehler, wenn EF versuchen Schlagwörter
Eine nicht behandelte Ausnahme des Typs ‚System zu holen .Data.SqlClient.SqlException trat in Microsoft.EntityFrameworkCore.dll auf Weitere Informationen: Ungültiger Spaltenname "AddressId".
Ich habe nicht einmal diese Id-Konvention.
Hinweis: Wenn ich explizit public ICollection<AddressTag> EntityTags { get; set; }
innerhalb Adresse POCO platzieren, dann funktioniert es perfekt, einschließlich EntityTags.Tag auch. Danke für jede Hilfe :)
Hatte similiar Ausgabe – miechooy
Die Probe unvollständig ist. "EntityBase" -Klasse fehlt und "öffentliche Liste Tags {get {return EntityTags?. Select (x => x.Tag). ToList(); }} 'kompiliert nicht (fehlende Einschränkung für' T'). Könnten Sie den Post mit den fehlenden Teilen aktualisieren, um ihn reproduzierbar zu machen? –