【发布时间】:2019-11-19 16:13:30
【问题描述】:
我对 Entity Framework 和 Cosmos DB 有疑问。
当我在这样的实体上使用.Include 时:
public async Task<People[]> GetAllPeopleAsync()
{
IQueryable<People> query = _context.Peoples.Include(p => p.Info);
return await query.ToArrayAsync();
}
我收到此错误:
Banco De dados Falhos LINQ 表达式 'LeftJoin, TransparentIdentifier>(outer: DbSet, inner: DbSet, outerKeySelector: (p) => 属性>(p, "Id"), innerKeySelector: (i) => 属性>(i, "PeopleId"), resultSelector: (o, i) => new TransparentIdentifier( 外 = o, 内 = 我 ))' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
保存数据作为 SQL 正常工作:
public void Add<T>(T entity) where T : class
{
_context.Add(entity);
}
public async Task<bool> SaveChangesAsync()
{
return (await _context.SaveChangesAsync()) > 0;
}
我的实体:
public class People
{
public Guid Id { get; set; }
public string Name { get; set; }
public Info Info { get; set; }
}
public class Info
{
public Guid Id { get; set; }
public string Street { get; set; }
public string Number { get; set; }
public Guid PeopleId { get; set; }
public People People { get; }
}
为了解决这个问题,我创建了一个从PeopleId 获取信息的函数,然后将其放入People,它可以按我的需要工作:
public async Task<Info[]> GetInfoByPepleIdAsync(Guid guidPeople)
{
IQueryable<Info> query = _context.Infos.Where(i => i.PeopleId == guidPeople);
return await query.ToArrayAsync();
}
GetAllPeopleAsync 函数如下所示:
public async Task<People[]> GetAllPeopleAsync()
{
IQueryable<People> query = _context.Peoples;
var Peoples = await query.ToArrayAsync();
foreach(People p in Peoples)
{
var Infos = await GetInfoByPepleIdAsync(p.Id);
p.Info = Infos.FirstOrDefault();
}
return Peoples;
}
我想知道是否有任何方法可以像包含在 CosmosDB 中一样工作?
如果没有等效的方法,这个方法是可行的还是我会有一些性能问题或什么?
【问题讨论】:
标签: entity-framework .net-core azure-cosmosdb