实体框架核心有问题。我正在尝试将 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()
at bot.Program.Main(String[] args) in -----------------:line 22
我只是无法添加 ulong 值,因为它会自动转换为 long。
答案 0 :(得分:2)
EF Core 的旧版本(2021 年 2 月 2 日之前)不支持 ulong。
我可以在您的表用户脚本中看到 DiscordId 表列的类型为 long
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 来处理您的第三方框架。