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 包含所有其他信息。这对我来说很好。
我正在尝试使用 entity framework 创建一个数据结构来基本上存储我的对象的 属性 值。我希望用户在运行时向 class 添加属性。这些属性可以是不同的数据类型。 (string/int/float 等..)
所以我想我需要一些 tables/classes,如下图所定义。
一件困难的事情是值存储在属性数据类型的 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 包含所有其他信息。这对我来说很好。