c# - EF 核心实体数据访问中的强制转换无效

标签 c# database .net-core model entity-framework-core

我在使用 Entity Framework 核心接收 .net core 服务中的实体时遇到问题。 当我尝试访问我的 DbSet 时,选择数据并导致异常就会出现问题。

我正在尝试像这样访问我的数据库集: Access of the customers db set

当我检查 _dbContext.Customers 结果 View 时,我看到以下错误: The cast error

所以看起来某些数据转换不起作用。我不明白的是为什么会发生这种情况。我已经检查了我的模型和数据库实体,一切都应该没问题......

这是我的代码:

型号:

[Table("customers")]
public class Customer
{
  [Column("id")]
  public int Id { get; set; }
  [Column("code")]
  public string Code { get; set; }
  [Column("card_num")]
  public string CardNum { get; set; }
  [Column("is_valid")]
  public bool IsValid { get; set; }
  [Column("valid_from")]
  public DateTime ValidFrom { get; set; }
  [Column("valid_to")]
  public DateTime ValidTo { get; set; }
  [Column("card_type")]
  public CardType CardType { get; set; }
  [Column("prepay_balance_cash")]
  public decimal PrepayBalanceCash { get; set; }
  [Column("prepay_limit_low")]
  public decimal PrepayLimitLow { get; set; }
  [Column("prepay_limit_high")]
  public decimal PrepayLimitHigh { get; set; }
  [Column("bc_contract_number")]
  public string BcContractNumber { get; set; }
}

public enum CardType
{
  Credit = 1, 
  Prepayment = 2,
  PrepaymentAndCredit = 3,
  Identification = 4,
  CreditAndPrepayment = 5
}

数据库上下文:

public DbSet<Customer> Customers { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{
  base.OnModelCreating(builder);
  builder.Entity<Customer>().HasKey(c => c.Id);
}

数据库表:

Database table part 1

...

Database table part 2

我真的不明白。我不知道为什么会发生这种情况,我有一些其他表以完全相同的方式实现,并且按预期工作。只是这个没有。

有人知道出了什么问题吗?

致以诚挚的问候

最佳答案

Column Card_Type 定义为 numeric(1,0),它将映射为 Decimal,并且您的 Enum 将是 Int 类型(如果可能),请将数据库列更改为 INT。

如果您使用 EF Core 2,请尝试在 OnModelCreating 中添加转换器,

modelBuilder
    .Entity<Customer>()
    .Property(e => e.CardType)
    .HasConversion<decimal>();

未尝试过,因此语法可能已关闭。但是让数据库本地存储正确的类型会提高性能。

关于c# - EF 核心实体数据访问中的强制转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173595/

相关文章:

.NET 表适配器 : Get vs. 填充?

mysql - 如何获取枚举的查询

c# - 在 C# 中工作的正则表达式在 MSBuild 中不起作用

c# - 返回自身的 Func<T> 的正确 'T' 是多少?

c# - 当属性中有命名空间前缀时,XmlSerializer 抛出 InvalidOperationException

c# - 不止一种控件类型的 WPF StackPanel.Resources setter ?

c# - 为特定用户更新数据库

mysql查询插入不存在的地方

c# - 如何检查 ASP.NET 页面中是否没有或所有文本框都输入了文本?

vue.js - 如何解决无法导入模块 '@nuxt/builder' ?