0

我有具有属性 CardType 的类 Person

public class Person{
    protected Person(){}    
    public Person(CardType cardType){
       cardType = CardType;
    }

    public CardType CardType { get; private set; }
    ... other properties ommited
}



public class CardType : Enumeration
{
    public static CardType Amex = new CardType(1, "Amex");
    public static CardType Visa = new CardType(2, "Visa");
    public static CardType MasterCard = new CardType(3, "MasterCard");

    public CardType(int id, string name)
        : base(id, name)
    {
    }
}

我正在尝试使用 EF Core 映射 CardType 属性

public void Configure(EntityTypeBuilder<Person> builder)
{
   builder.ToTable("Person");
   builder.Property(x => x.CardType);
}

但我得到以下信息:

属性“Person.CardType”属于“CardType”类型,当前数据库提供程序不支持。更改属性 CLR 类型或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略该属性。

4

2 回答 2

0

您不能将自定义类用作数据属性的类型(它们只能在导航属性中使用)。您需要使用枚举:

public enum CardType
{
    Default = 0,
    Amex,
    Visa,
    MasterCard
}
于 2019-09-18T07:44:42.180 回答
0

在数据库中只存储一个枚举对象的 ID,也可以使用 HasConversion 方法来来回转换你的枚举类型,就像这样

builder.Property(c => c.CardType).HasConversion(c => c.Id, c => CardType.From(c));

其中“From”方法可以从提供的 Id 实例化一个枚举

于 2020-09-26T18:56:19.510 回答