Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework core 如何将可为null的tinyint列映射到EF Core中null变为false的bool?_Entity Framework Core - Fatal编程技术网

Entity framework core 如何将可为null的tinyint列映射到EF Core中null变为false的bool?

Entity framework core 如何将可为null的tinyint列映射到EF Core中null变为false的bool?,entity-framework-core,Entity Framework Core,我为SqlServer数据库维护了一套应用程序,该数据库没有简单的创建过程,生产中的各种实例略有不同(关于列的可空性和varchar大小)。我正在将这些应用程序的数据层从EF 6移动到EF Core 2.1,以增加平台支持,并最终以一种简单的方式创建具有一致布局的新数据库 我可能会借此机会清理一下我的POCO。我希望消除的一种模式是,原始SqlServer数据库通常使用tinyintnull,而不是对bit列进行默认约束。在我的C代码中,它们被映射到byte?而不是bool,我认为这不必要地使它

我为SqlServer数据库维护了一套应用程序,该数据库没有简单的创建过程,生产中的各种实例略有不同(关于列的可空性和varchar大小)。我正在将这些应用程序的数据层从EF 6移动到EF Core 2.1,以增加平台支持,并最终以一种简单的方式创建具有一致布局的新数据库

我可能会借此机会清理一下我的POCO。我希望消除的一种模式是,原始SqlServer数据库通常使用
tinyintnull
,而不是对
bit
列进行默认约束。在我的C代码中,它们被映射到
byte?
而不是
bool
,我认为这不必要地使它们的使用复杂化。接下来,我希望新数据库改用位字段,在许多情况下,它们不为null并默认为0是合适的。我已经实现了这一点,但我认为,利用EF Core的所有灵活性,我应该能够对我的DbContext进行子类化,并提供不同的映射,以便使相同的代码能够在原始的“遗留”数据库上运行,而这些数据库仍然是可为空的tinyint

尝试1 我希望在我的LegacyDbContext子类中使用
ValueConverter
来实现这一点(将其传递到
PropertyBuilder.HasConversion
),直到我了解到在的限制部分下这些不能用于转换空值,所以我得到一个
系统。invalidoOperationException
声明:
读取属性“”的数据库值时发生异常。预期类型为“System.Boolean”,但实际值为null。

尝试2 正在注册自定义
Microsoft.EntityFrameworkCore.Metadata.Internal.IEntityMaterializerSource
实现,以便为我处理此转换,但我也无法使其正常工作,我认为调用它太晚,无法执行类型转换

当然,在从字节到bool的类型转换之前,可以用0替换null,或者使用bool映射回旧数据库的可为null的tinyint的其他机制来完成我的新POCO