如何使用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
我认为实体至少有和数据集一样多的功能…
我将感激任何帮助,即使答案是这是不可能做到的。
谢谢。
您可以允许实体通过覆盖受保护的方法GetDynamicValue
和SetDynamicValue
来支持动态属性。
动态属性的值如何通过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;