起因:

  在项目开发中遇到一个问题 后台表单根据用户配置会产生不同的表单字段,所以表设计结构为

通过dynamic  实现实体类属性动态新增

在tb_ArticleAttributeField保存字段基本信息 根据用户配置在表tb_ArticleAttributeValue生成字段

通过dynamic  实现实体类属性动态新增

表设计完成时遇到了问题,表结构根据用户配置会随时改变  产生的问题就是 实体类无法固定

绑定view时没法通过Model来进行绑定

在网上找了找到两种方法

DataTable 与dynamic

这篇主要描述采用dynamic如何处理

主要是:1、继承DynamicObject

    2、重写TrySetMember TryGetMember

源码如何下

/// <summary>
/// There are no comments for DTMVCCMS.Model.ArticleAttributeValue, DTMVCCMS.Model in the schema.
/// </summary>
[Table("tb_ArticleAttributeValue")]
public class ArticleAttributeValue: DynamicObject
{
/// <summary>
/// There are no comments for ArticleID in the schema.
/// </summary>
[Property("ArticleID", KeyType = KeyType.Identity)]
public virtual int ArticleID { get; set;}
private readonly Dictionary<string, object> _properties;
public ArticleAttributeValue (){}
public ArticleAttributeValue(Dictionary<string, object> properties)
{
_properties = properties;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (!_properties.Keys.Contains(binder.Name))
{
_properties.Add(binder.Name, value.ToString());
}
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return _properties.TryGetValue(binder.Name, out result);
}
}

控制器调用处理

dynamic myObj = new ExpandoObject();
Dictionary<string, object> dic = new Dictionary<string, object>()
{
{"Name","Frank"},
{"Age",23},
{"Work","码农"}
};

myObj = new ArticleAttributeValue(dic);
myObj.ArticleID = 1;
return View(myObj);

View调用

<div>
年龄为: @Model.Age
</div>
<div>
姓名为: @Model.Name
</div>
<div>
ID为: @Model.ArticleID
</div>
<div>
工作: @Model.Work
</div>

效果如下:

通过dynamic  实现实体类属性动态新增

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-20
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-08
相关资源
相似解决方案