Код: Выделить всё
var entity = await context.Set().Include(e => e.VgnItmImages)
.ThenInclude(vi => vi.Image)
.FirstOrDefaultAsync(v => v.Id == id);
Произошло исключение: CLR/Npgsql.PostgresException Выброшено исключение:
«Npgsql.PostgresException» в System.Private.CoreLib.dll: «42703:
столбец v0.VgnItmDbEntityId не существует
POSITION: 1163» в
Npgsql. Internal.NpgsqlConnector.d__233.MoveNext()
at
System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder
Код: Выделить всё
1.StateMachineBoxтокен) в Npgsql.NpgsqlDataReader.d__52.MoveNext()
в Npgsql.NpgsqlDataReader.d__52. MoveNext() в
Npgsql.NpgsqlCommand.d__119.MoveNext() в
Npgsql.NpgsqlCommand.d__119.MoveNext() в
Npgsql.NpgsqlCommand.d__112.MoveNext() в
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.d__18.MoveNext()
at
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.d__18.MoveNext()
at
Microsoft.EntityFrameworkCore.Query. Internal.SingleQueryingEnumerable
Код: Выделить всё
1.AsyncEnumerator.d__21.MoveNext() at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.d__7at
Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable
Код: Выделить всё
1.AsyncEnumerator.d__20.MoveNext() at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitableat
Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.d__15
Код: Выделить всё
1.MoveNext() at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.d__15в Vepo.Data.VgnItmsRepository`5.d__9.MoveNext() в
/Users/benjaminfarquhar/dev/vepo_back_end/Vepo.Data/Repositories/VgnItms/VgnItmsRepository .cs:line
144
Это мои объекты и их конфигурация в OnModelCreating:
Код: Выделить всё
public class VgnItmDbEntity : CreatedBySomeoneDbEntity
{
[Required]
public string Name { get; set; }
[Required]
public string CompanyName { get; set; }
[MaxLength(3000)]
public string Description { get; set; }
[MaxLength(900)]
public string WebPage { get; set; }
public string Instagram { get; set; }
public string Facebook { get; set; }
[Required]
public int IsNotVeganCount { get; set; } = 0;
[Required]
public int IsVeganCount { get; set; } = 0;
[Required]
public int RatingsCount { get; set; } = 0;
public double? Rating { get; set; }
[Required]
public List Tags { get; set; }
public List SecondaryTags { get; set; }
public int? PricePoint { get; set; }
public ICollection VgnItmImages { get; set; }
public string Discriminator { get; set; }
}
public class VgnItmImageDbEntity : CreatedBySomeoneDbEntity
{
[ForeignKey(nameof(VgnItm))]
public int VgnItmId { get; set; }
public VgnItmDbEntity VgnItm { get; set; }
[ForeignKey(nameof(Image))]
public int ImageId { get; set; }
public ImageDbEntity Image { get; set; }
}
public class ImageDbEntity : CreatedBySomeoneDbEntity
{
[Required]
public Uri Url { get; set; }
public List Tags { get; set; }
public ICollection VgnItmImages { get; set; } = new List();
}
public abstract class CreatedBySomeoneDbEntity : DbEntity
{
public string CreatedById { get; set; }
public UserDbEntity CreatedBy { get; set; }
public string UpdatedById { get; set; }
public UserDbEntity UpdatedBy { get; set; }
}
public abstract class DbEntity
{
[Key]
public TId Id { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime UpdatedDate { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var uriConverter = new ValueConverter(
v => v == null ? null : v.ToString(),
v => v == null ? null : new Uri(v)
);
modelBuilder.Entity(image =>
{
image.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
image.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
image.Property(i => i.Url)
.HasConversion(uriConverter);
});
// Vegan Item Images
modelBuilder.Entity(viImage =>
{
viImage.HasKey(e => new { e.VgnItmId, e.ImageId });
viImage.HasOne(e => e.VgnItm)
.WithMany(v => v.VgnItmImages)
.HasForeignKey(e => e.VgnItmId);
viImage.HasOne(e => e.Image)
.WithMany(i => i.VgnItmImages)
.HasForeignKey(e => e.ImageId);
viImage.HasIndex(g => new { g.VgnItmId, g.ImageId }).IsUnique();
viImage.Property(e => e.Id).IsRequired().ValueGeneratedOnAdd();
viImage.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
viImage.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
viImage.HasOne(q => q.UpdatedBy)
.WithMany()
.HasForeignKey(k => k.UpdatedById);
viImage.HasOne(q => q.CreatedBy)
.WithMany()
.HasForeignKey(k => k.CreatedById);
});
modelBuilder.Entity(vgnItm =>
{
vgnItm.HasIndex("CompanyName", "Name", "Discriminator").IsUnique();
vgnItm.Property(e => e.Id).IsRequired().ValueGeneratedOnAdd();
vgnItm.HasDiscriminator("Discriminator")
.HasValue("RecipeItm")
.HasValue("EventItm")
.HasValue("GroceryItm")
.HasValue("MenuItm")
.HasValue("RestaurantItm")
.HasValue("GroceryStoreItm")
.HasValue("FashionItm");
vgnItm.Property(u => u.CreatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
vgnItm.Property(u => u.UpdatedDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
vgnItm.HasKey(e => e.Id);
vgnItm.HasOne(q => q.UpdatedBy)
.WithMany()
.HasForeignKey(k => k.UpdatedById);
vgnItm.HasOne(q => q.CreatedBy)
.WithMany()
.HasForeignKey(k => k.CreatedById);
vgnItm.HasMany(e => e.VgnItmImages)
.WithOne()
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity(recipeItm =>
{
recipeItm.Property(e => e.Ingredients).HasColumnType("jsonb");
recipeItm.Property(e => e.Method).HasMaxLength(100);
recipeItm.Property(e => e.Tips).HasMaxLength(20);
recipeItm.Property(e => e.Ingredients).HasMaxLength(100);
});
modelBuilder.Entity(singleLocationVgnItm =>
{
singleLocationVgnItm.HasIndex("CompanyName", "Name", "Discriminator", "LocationId").IsUnique();
singleLocationVgnItm
.HasOne(s => s.Location) // Each SingleLocationVgnItm has one Location.
.WithMany() // A Location can be associated with many SingleLocationVgnItm.
.HasForeignKey(s => s.LocationId); // Foreign key in SingleLocationVgnItm pointing to Location.
});
Как сообщить об этом EF Core? что имя столбца — не VgnItmDbEntityId, а VgnItmId?
Я использую EF Core 8.0.4. Я проверяю, является ли это ошибкой.
У этого парня была похожая проблема, но я уже использую его решение HasForeignKey в onModelCreating.
Подробнее здесь: https://stackoverflow.com/questions/786 ... in-columns
Мобильная версия