У меня есть такая сущность со свойством, которое отображается как принадлежащая сущность:
public class Foo
{
public int Id { get; set; }
public DateTimeWithTimeZone DoneAt { get; set; }
}
public class DateTimeWithTimeZone
{
public DateTimeOffset Time { get; set; }
public string TimeZone { get; set; }
}
И конфигурация базы данных выглядит следующим образом:
public void Configure(EntityTypeBuilder<Foo> builder)
{
builder.HasKey(x => x.Id);
builder.OwnsOne(x => x.DoneAt, y =>
{
y.WithOwner();
y.Property(z => z.Time).HasColumnName("DoneAt");
y.Property(z => z.TimeZone).HasColumnName("DoneAtTimeZone");
});
}
Я могу вставить сущность Foo в базу данных с EF и возвращает список Foos для базы данных:
var list = apiDbContext.Foos.ToList();
var list = apiDbContext.Foos.FirstOrDefault(x => x.Id == 1122);
Но когда я запрашиваю LastOrDefault:
var p = apiDbContext.Foos.LastOrDefault(x => x.Id == 1122);
я получаю эта ошибка:
System.InvalidOperationException: 'The LINQ expression 'DbSet<Prescription>
.Where(p => p.Id == 1122)
.Select(p => (IncludeExpression(
EF.Property<DateTimeWithTimeZone>(p, "DoneAt"), DoneAt)
))
.Last()' could not be translated.
Either rewrite the query in a form that can be translated, or
switch to client evaluation explicitly
by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync().