如何使用n层实体框架动态添加实体属性

本文关键字:实体 动态 添加 属性 框架 何使用 | 更新日期: 2023-09-27 18:04:34

我想知道如何动态地向实体添加未确定数量的未映射属性。我们目前使用的是一个数据表,动态添加列,然后将表绑定到一个超网格;我想用实体来复制。请注意,我正在使用n层实体框架(https://ntieref.codeplex.com/)。

我可以动态地创建具有属性的实体,或者动态地向不包含任何映射属性的现有实体添加属性。每次应用程序运行时,都会添加不同数量的属性,因此我不需要永久保留新的/动态属性。我希望能够将EntitySet绑定为一个超网格的数据源;我不会直接使用这个实体进行数据修改,只访问状态跟踪。

我在n层实体框架库中发现了一个DynamicPropertyHelper类,但我无法确定它的用途。

我的实体已经继承了另一个类,因此不能继承ExpandoObject。

这里有一些相关的帖子,但我不认为它们是我正在寻找的答案。
动态添加任意名称的新属性到对象

http://social.msdn.microsoft.com/forums/en us/e9ebabd3 - 1423 - 48 - f5 - a57b cf1248117851/how -做-我-添加- -属性字段- -运行时在c?forum=vsexpressvcs

我认为实体至少有和数据集一样多的功能…

我将感激任何帮助,即使答案是这是不可能做到的。

谢谢。

如何使用n层实体框架动态添加实体属性

您可以允许实体通过覆盖受保护的方法GetDynamicValueSetDynamicValue来支持动态属性。

动态属性的值如何通过WCF数据合约存储和公开取决于您。但是,您可以使用DynamicPropertyHelper来完成此工作。该助手使用二进制序列化和base-64编码将所有动态属性存储为XML字符串。下面是一个示例:

partial class MyEntity
{
    [DataMember]
    [SimpleProperty]
    private string DynamicContent
    {
        get { return _dynamicContent; }
        set
        {
            if (_dynamicContent != value)
            {
                OnPropertyChanging("DynamicContent", value);
                var previousValue = _dynamicContent;
                _dynamicContent = value;
                OnPropertyChanged("DynamicContent", previousValue, value);
            }
        }
    }
    private string _dynamicContent;
    protected override object GetDynamicValue(string propertyName)
    {
        return DynamicPropertyHelper.GetDynamicProperty(DynamicContent, propertyName);
    }
    protected override void SetDynamicValue(string propertyName, object value)
    {
        var dynamicContent = DynamicContent;
        DynamicPropertyHelper.SetDynamicProperty(ref dynamicContent, propertyName, value);
        DynamicContent = dynamicContent;
    }
}

你可以简单地通过实体的索引器设置和获取动态属性值:

MyEntity x = ...;
x[“DynamicPropertyName”] = dynamicPropertyValue;