我在使用 Entity Framework 核心接收 .net core 服务中的实体时遇到问题。
当我尝试访问我的 DbSet
时,选择数据并导致异常就会出现问题。
当我检查 _dbContext.Customers
结果 View 时,我看到以下错误:
所以看起来某些数据转换不起作用。我不明白的是为什么会发生这种情况。我已经检查了我的模型和数据库实体,一切都应该没问题......
这是我的代码:
型号:
[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);
}
数据库表:
...
我真的不明白。我不知道为什么会发生这种情况,我有一些其他表以完全相同的方式实现,并且按预期工作。只是这个没有。
有人知道出了什么问题吗?
致以诚挚的问候
最佳答案
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/