假设我有两个模型,标签和帖子,标签模型非常大(很多列)。一个标签可以有多个帖子,一个帖子可以有多个标签。
我知道如何设置标签和帖子之间关系的唯一方法是做
var veryLargeTagList = context.Tags.Where(some logic).ToArray();
myPost.Tags.AddRange(veryLargeTagList);
我的问题是,这似乎需要将大量标签加载到内存中,将这些标签添加到帖子中的最有效(最快/内存效率)方式是什么?有没有一种方法可以仅使用标签 ID 添加要发布的标签?像这样:
var veryLargeTagList = context.Tags.Where(some logic).Select(e=>e.Id).ToArray();
myPost.Tags.AddRange(veryLargeTagList);
你可以使用两种方式
1。 你可以使用 tsql 批量插入
create proc insertPost
@Text nvarchar(100)
as
insert into Posts
(Text,created,tageID)
select @Text,GETDATE(),Id
from Tags
where some logic
你可以使用批量插入
var bulkConfig = new BulkConfig()
{
BatchSize = 1024
};
var subEntities = new List<PostTag>();
SchoolContext context = new SchoolContext();
string text = "";
int PostId = context.Post.FirstOrDefault(d => d.Text == text).ID;
subEntities = context.Tags.Where(some logic).Select(t => new PostTag { PostId = PostId, TagId = t.ID }).ToList();
await context.BulkInsertAsync(subEntities, bulkConfig);
BulkExtensions 库的链接:EFCore.BulkExtensions
BulkExtensions 学习链接:LearnBulkExtensions