c# - EF Core 自动将 ulong 转换为 long
问题描述
我对实体框架核心有疑问。我正在尝试添加DbUser
到数据库。
public class DbUser
{
public int Id { get; set; }
public ulong DiscordId {get; set; }
public int Points { get; set; } = 0;
public bool Daily { get; set; } = true;
}
using (var context = new DiscordContext())
{
context.Database.EnsureCreated();
var user = new DbUser()
{
DiscordId = (ulong) 332282501902893056
};
context.Users.Add(user);
context.SaveChanges();
}
当我保存更改时,它会引发异常。
System.InvalidCastException:无法将“System.UInt64”类型的对象转换为“System.Int64”类型。
在 Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer`1.Equals(Object left, Object right)
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.LocalDetectChanges(InternalEntityEntry entry)
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectChanges(IStateManager stateManager )
在 Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker.DetectChanges()
在 Microsoft.EntityFrameworkCore.DbContext.TryDetectChanges()
在 Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
在 Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
在 bot.Program。 Main(String[] args) in -----------------:line 22
我只是不能添加 ulong 值,因为它会自动转换为 long。
解决方案
EF Core 的旧版本(2 月 2 日之前)不支持 ulong。
我可以在您的表用户脚本中看到 DiscordId 表列的类型很长
DiscordId = table.Column<long>(type: "bigint unsigned", nullable: false),
您只需要将 dbuser 类的 DiscardId 更改为相同
public long DiscordId {get; set; }
我发现MySql没有UInt64,它只有Int64类型。所以也许你将不得不使用这样的属性
[NotMapped]
public ulong DiscordId {
get {return DiscordDbId;}
set {DiscordDbId=(long)value; }
}
[Column("DiscordId")]
public long DiscordDbId {get; set; }
您可以使用 DiscordDbId 与 dbcontext 一起使用,但在此之后您可以使用 DiscordId 与您的第三方框架一起使用。
推荐阅读
- spring-boot - Spring Boot 连接池最大大小允许更多连接
- javascript - 如何获取有关 .innerText 的所有样式信息
- php - 在 WooCommerce 电子邮件通知的文本中显示送货地址2
- cassandra - 在 Cassandra 上创建键空间后,节点进入耗尽状态
- c# - 如何在剃刀视图中添加两个变量
- android - 如何跨平台与Android和IOS
- android - Firebase 数据更新滞后 - 多人游戏
- android - Firebase 未记录安装引荐来源网址
- visual-studio - Docker AspNet Core + Couchbase
- docker - 无法从 docker 映像连接到 dockerhost