如何:将类型安全的键/值对存储在EF Core中

时间:2019-03-07 19:37:29

标签: entity-framework-core

我需要将类型安全的实体键/值对存储在EF Core中。

键值类型

// KeyValuePair<string,bool>
// KeyValuePair<string,int>
// KeyValuePair<string,string>
// KeyValuePair<string,float>
// KeyValuePair<string,DateTime>

实体

public class MyEntity
{
    public int Id { get; set; }
    public List<KeyValuePair<string,T>> Attributes { get; set; }
}

其他地方

{
    …
    dbContext.MyEntity.Add(new KeyValuePair<string,bool>("Active", true);
    dbContext.MyEntity.Add(new KeyValuePair<string,string>("Customer", "Microsoft");
    dbContext.MyEntity.Add(new KeyValuePair<string,string>("Street", "1 Microsoft Way");
    dbContext.MyEntity.Add(new KeyValuePair<string,float>("Rating",5.0);
}

这如何在EF Core中完成?

1 个答案:

答案 0 :(得分:0)

我知道答案来得太晚了,但是尝试持久化键值对时我遇到了同样的问题。 我发现的唯一方法是对它们进行强类型化,因为EF不知道如何持久化KeyValue实体。

这是我的模特:

public class Payment
{
    //-- Properties
    public int PaymentId { get; set; }
    public decimal Amount { get; set; }
    public string Currency { get; set; }

    public virtual List<PaymentField> PaymentFields { get; set; } = new List<PaymentField>();        
}

public class PaymentField
{
    //-- Properties
    [Key]
    public int PaymentFieldId { get; set; }

    // References master table
    public int PaymentId { get; set; }
    public virtual Payment Payment { get; set; }
    public virtual List<PaymentFieldItem> PaymentFieldItems { get; set; } = new List<PaymentFieldItem>();
}

public class PaymentFieldItem
{
    public int PaymentFieldItemId { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }

    public int PaymentFieldId { get; set; }
    public virtual PaymentField PaymentField { get; set; }
}

希望您可以根据自己的需要进行调整。