动态地将属性添加到实体框架对象

时间:2015-06-11 14:09:05

标签: c# entity-framework class-design

我有一个这样的课程:

public class Empresa 
{
    public string Nombre { get; set; }
    public string NIT { get; set; }
    public string NombreRepresentanteLegal { get; set; }
    public string TelefonoRepresentanteLegal { get; set; }
    public string NombreContacto { get; set; }
    public string TelefonoContacto { get; set; }
}

但是在我的应用程序中,我希望用户能够添加自定义属性,例如twitter句柄,但是我没有找到如何做到的文档,我听说过EAV模型,但那不是性能

1 个答案:

答案 0 :(得分:1)

您可以将其他数据作为XML存储到XML列中,并让客户端适当地反序列化/序列化元数据。当您不知道数据的结构,或者是否可以在运行时更改结构时,Xml可以是一个可行的解决方案。

您还可以使用INDEX XML来帮助进行碎化/查询,因此可以在处理大型xml文档时保持性能。

您的类可以包含ExtraPropertiesElement,它接受XML字符串,并将其解析为XElement,然后您可以使用XPath来查询请求的xml元素/属性。

这种方法的一个问题是,所有其他属性都以XML格式存储在数据库中,并且对数据执行查询并不容易。这样做很简单,但它并不像从表中选择列名那么简单。

您可以阅读有关XML数据类型和用途here的更多信息 您还可以阅读有关如何查询XML列存储here

的信息
public class Empresa 
{
    public string Nombre { get; set; }
    public string NIT { get; set; }
    public string NombreRepresentanteLegal { get; set; }
    public string TelefonoRepresentanteLegal { get; set; }
    public string NombreContacto { get; set; }
    public string TelefonoContacto { get; set; }

    [Column(TypeName="xml")]
    public string ExtraProperties { get; set; }

    [NotMapped]
    public XElement ExtraPropertiesElement
    {
        get { return XElement.Parse(ExtraProperties ); }
        set { ExtraProperties = value.ToString(); }
    }
}