实体框架核心/值转换“ InvalidCastException”布尔值转换为整数

时间:2018-09-06 22:05:10

标签: c# db2 entity-framework-core

我的EF Core在从bool到int的值转换方面有些麻烦。

背景是我使用IBM的DB2作为数据库,而较早的版本不支持BIT类型,因此我必须使用其他方法来模拟布尔值。就我而言,我只是不想使用1和0。

我想通过EF核心价值转换来做到这一点。 我的转换器类:

var user = identityContext.Users.First();

因此,布尔值是我的模型类型(TModel),而整数是数据库类型(TProvider)。

执行以下简单的代码行之后:

BoolToZeroOneConverter<int>

我得到了错误:

  

InvalidCastException:无法将类型为“ System.Int32”的对象转换为类型为“ System.Boolean”。

我也不知道为什么。插入件工作正常,并且属性以正确的值(1/0)存储,但选择部分损坏了。

使用内置类public class IdentityUser<TKey> where TKey : IEquatable<TKey> { public IdentityUser(); public IdentityUser(string userName); public virtual DateTimeOffset? LockoutEnd { get; set; } [PersonalData] public virtual bool TwoFactorEnabled { get; set; } [PersonalData] public virtual bool PhoneNumberConfirmed { get; set; } [ProtectedPersonalData] public virtual string PhoneNumber { get; set; } public virtual string ConcurrencyStamp { get; set; } public virtual string SecurityStamp { get; set; } public virtual string PasswordHash { get; set; } [PersonalData] public virtual bool EmailConfirmed { get; set; } public virtual string NormalizedEmail { get; set; } [ProtectedPersonalData] public virtual string Email { get; set; } public virtual string NormalizedUserName { get; set; } [ProtectedPersonalData] public virtual string UserName { get; set; } [PersonalData] public virtual TKey Id { get; set; } public virtual bool LockoutEnabled { get; set; } public virtual int AccessFailedCount { get; set; } public override string ToString(); } 会导致相同的错误。

EF Core最高为2.1.1

我想念什么吗? 谢谢您的帮助。

更新 ApplicationUser继承“ IdentityUser”

{{1}}

1 个答案:

答案 0 :(得分:0)

我们遇到了同样的问题,唯一可行的办法是禁用值转换,并使用相同的名称但期望的类型创建我们自己的属性,编译器会发出警告,但这是我们使其起作用的唯一方法

public class ApplicationUser : IdentityUser {

    //Hack: Used as a workaround with DB2's data types
    public int LockoutEnabled { get; set; }
    public int EmailConfirmed { get; set; }

}