c# – 将未知数量的列映射到Dictionary

我有一个遗留系统,可以在需要时动态扩充带有其他列的表.现在我想通过C#/ NHibernate访问所述表.

没有办法改变遗留系统的行为,我动态地需要使用附加列中的数据.因此,动态组件映射不是一种选择,因为我不知道其他列的确切名称.

有没有办法将所有未映射的列放入字典(列名作为键)?或者,如果这不是一个选项,将所有列放入字典?

同样,我不知道编译时列的名称,所以这必须是完全动态的.

例:

public class History
{
    public Guid Id { get; set; }
    public DateTime SaveDateTime { get; set; }
    public string Description { get; set; }
    public IDictionary<string, object> AdditionalProperties { get; set; }
}

因此,如果表History包含Columns Id,SaveDateTime,Description,A,B,C和D,我想在IDictionary中包含“A”,“B”,“C”和“D”.或者,如果这太难了,只需将所有列放在那里.

对于初学者,如果有帮助,我也可以使用字符串列.

最佳答案 您可能需要一个ADO.NET查询来获取此数据.如果使用NH,即使使用SELECT *进行SQL查询,也不会获得列名.

您可以尝试使用SMO(SqlServer管理对象,SqlServer的.NET端口)或其他方式来查找表定义.然后使用动态组件Fluent NHibernate构建映射.在使用会话工厂后,我不确定是否可以更改映射.值得一试.祝好运 :-)

点赞