我试图使用投影写入数据库,以避免将域对象映射到与表布局匹配的对象。然而,我发现的每个投影示例只显示如何从数据库中读取。如何将我的实体投影到其数据库版本以插入它?
class Foo
{
//...
}
class FooEF
{
//...
}
DbSet<FooEF> dbSet;
// Read
var foos = dbSet.Select(fooEF => new Foo { ... }).ToList();
// Write
???发布于 2021-09-30 13:15:09
你不能用EF核心做这件事。任何插入/更新/删除应通过更改跟踪器。
无论如何,有扩展linq2db.EntityFrameworkCore可以帮助进行这样的查询(免责声明:我是创建者之一)
var foos = dbSet.Select(fooEF => new Foo { ... });
foos.Insert(dbSetFoo.ToLinqToDBTable(), x => x);扩展将创建INSERT FROM SQL,并且不会将数据传输到客户端。
发布于 2021-09-30 12:57:35
您需要使用db上下文。您必须为dbSet类型定义Foo
public class ApplicationDbContext : DbContext
{
public DbSet<Foo> DbSetFoo{ get; set; }
public DbSet<FooEF> DbSetFooEF { get; set; }
...
}
...
var foos = dbSet.Select(fooEF => new Foo {...})
.ToList()
.ForEach(foo=>context.DbSetFoo.Add(foo));
context.SaveChanges();https://stackoverflow.com/questions/69392441
复制相似问题