我需要使用for (var i = 0; i < 10; i++) {
asynccall("Hello", function (others, err, data) {
console.log("Others is same as i in synchrnous call " + others);
}.bind(this, i));
}
类来处理我的类的大整数,但是当尝试使用EntityFramework Core映射到DB表时,我收到以下错误:
无法映射属性
BigInteger
,因为 它的类型为AllianceRank.Reputation
,不受支持 基本类型或有效实体类型。要么明确地映射这个 财产,或忽略它。
BigInteger
[Column("reputation")]
public BigInteger Reputation { get; set; }
似乎不是支持的映射类型。如何强制它映射,或以其他方式解决此问题?
答案 0 :(得分:2)
实体框架必须对如何存储它做出假设。例如,如果您使用的是SQL服务器,则bigint
不起作用,因为您的值可能大于或小于bigint
的值。 varchar
会更合适吗?可能,但如果你真的认为它是一个数字,而不是说,一个标识符,要求EF查询这个数字将是有问题的。从本质上讲,有一些不太模糊的类型,例如long
或string
,您不会在如何将其存储到实体框架中进行猜测。
答案 1 :(得分:1)
仅支持标量类型,字符串和字节[]。 可用的最大标量类型是十进制。哪个&#34;只有&#34;允许28-29位有效数字。
答案 2 :(得分:0)
从EF Core 2.1开始,在OnModelCreating()
类的DbContext
函数中定义数据模型时,可以定义Value Conversions。
最好的部分是,这允许在读取或写入数据库时自动转换属性值!
因此,在您的情况下,您在C#中具有BigInteger
属性(Reputation
),在MySQL中具有相应的INT(25)
字段,您可以这样做:
var converter = new ValueConverter<BigInteger, long>(
model => (long)model,
provider => new BigInteger(provider));
modelBuilder
.Entity<AllianceRank>()
.Property(e => e.Reputation)
.HasConversion(converter);
P.S。您实际上可能想使用变长string
类型(如VARBINARY)将值存储在MySQL中,而不是INT(25)
,因为C#BigInteger
存储的值大得多,因此会导致异常转换为INT(25)
或C#long
时。
答案 3 :(得分:0)
使用
public Int64 FieldName { get; set; }
在您的模型类中,它将是 SQL 中的“bigint”数据类型