如何从EntityFramework Core 2中的IModel获取SqlDbType或DbType?

时间:2017-08-24 22:01:12

标签: entity-framework-core

我的用例是:

我有一个来自Entity Framework Core 2(EFC 2)中许多实体的对象图。在EFC 2中,SaveChanges操作非常慢。原因似乎是每个查询Sql Server可以接收的参数数量限制。由于Sql Server每个查询接收2100个参数,因此保存数十万个寄存器必须导致许多往返,并且隐含了很多延迟。有关详细信息,请参阅问题2484。我目前的解决方案是使用表值参数(TVP)生成带有查询的SqlCommand。计划是对每个表和操作(插入,更新和删除)仅使用带有TVP的一个查询,仅使用一个往返来保存所有更改。 EFC实际上不能这样做。

理论上,我几乎完成了这个,但我遇到了问题。要使用TVP,我必须从我的表类型中获取每列的SqlDbType。表类型是使用EFC中IModel中的元数据生成的。但是,我不能得到SqlDbType。简化,我试过:

var typeMapper = new SqlServerTypeMapper(new RelationalTypeMapperDependencies());
var entityType = context.Model.GetEntityTypes().First();
var prop = entityType.GetProperties().First();
var mapping = typeMapper.GetMapping(prop);
var dbType = mapping.DbType;

拥有 dbType ,计划是使用Dictionary从 dbType 获取SqlDbType。问题是dbType变为null。

我在api中搜索过,我可以从IModel中提取SqlType。这可能吗?

0 个答案:

没有答案