Entity framework 向我的 class 添加属性(超出我的理解)

Entity framework adding properties to my class (over my head)

我正在尝试使用 entity framework 创建一个数据结构来基本上存储我的对象的 属性 值。我希望用户在运行时向 class 添加属性。这些属性可以是不同的数据类型。 (string/int/float 等..)

所以我想我需要一些 tables/classes,如下图所定义。 所以我的对象 class 包含一个属性列表,这些属性属于 de 属性 定义 class 中定义的类型。

一件困难的事情是值存储在属性数据类型的 table 中。 (那么有条件的外键?)

请给我一些关于如何使用 Fluent API 实现它的指示。或者关于这个主题的其他想法。 (我想我不会是第一个;)

维尔纳

EF 实体模型无法在运行时更改(或至少不是为之设计的)。您可以使用基础结构来存储 propertyname/propertyvalye 和 EF,但我认为这不是正确的选择(您失去了大部分功能)。

最好的选择可能是 NoSQL 数据库,ADO.Net 或者,如果只有一些对象可以个性化,而其他对象是固定的,您可以将可个性化的对象存储在 XML/JSON 的文本字段中。

我找到了这个link

这帮助我解决了我的 "Table Per Type" 问题。我现在有:

public abstract class PropertyBase
{
    public int PropertyID { get; set; }
    public string Name { get; set; }
}

public class TextProperty : PropertyBase
{
    public string Value { get; set; }
}

public class IntProperty : PropertyBase
{      
    public int Value { get; set; }
}

我在我的数据库上下文中添加了:

        modelBuilder.Entity<PropertyBase>()
            .HasKey(p => p.PropertyID)
            .ToTable("Properties");                    

        modelBuilder.Entity<IntProperty>()
            .ToTable("IntProperties");

        modelBuilder.Entity<TextProperty>()
            .ToTable("TextProperties");

不同类型的属性(子 classes)现在存储在单独的表中。主要摘要 class 包含所有其他信息。这对我来说很好。