首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用N-Tier entity Framework动态添加实体属性?

如何使用N-Tier entity Framework动态添加实体属性?
EN

Stack Overflow用户
提问于 2014-05-22 23:22:45
回答 1查看 1.6K关注 0票数 2

我想知道如何向实体动态添加数量不确定的未映射属性。我们目前使用的是DataTable并动态添加列,然后将该表绑定到UltraGrid;我想用一个实体来复制它。请注意,我使用的是N-Tier实体框架(https://ntieref.codeplex.com/)。

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

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

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

这里有一些相关的帖子,但我不认为它们是我想要的答案。

Dynamically add new property with any name to object

http://social.msdn.microsoft.com/Forums/en-US/e9ebabd3-1423-48f5-a57b-cf1248117851/how-do-i-add-a-property-field-at-runtime-in-c?forum=Vsexpressvcs

我认为实体至少具有和datasets…一样多的功能

我非常感谢任何人的帮助,即使答案是不可能做到的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-24 06:07:54

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

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

代码语言:javascript
复制
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;
    }
}

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

代码语言:javascript
复制
MyEntity x = ...;
x[“DynamicPropertyName”] = dynamicPropertyValue;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23810996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档