EF Core 自动将 ulong 转换为 long

时间:2021-07-14 20:44:30

标签: c# entity-framework .net-core entity-framework-core

实体框架核心有问题。我正在尝试将 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。

1 个答案:

答案 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 来处理您的第三方框架。

相关问题