我的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}}
答案 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; }
}