背景
我正在使用 Microsoft Dynamics CRM 2011 QueryExpressions,对于所有非 CRM 人员,我只知道我正在使用 SDK 来访问一个数据库,该数据库需要您输入您选择的列的字符串名称在自定义 ColumnSet 类中:
new ColumnSet("personid", "name", "age");
SDK 确实生成了早期绑定类,所以我确实有所有数据库表的类,并且早期绑定类都有一个字典,其键是已在对象上填充的表的列。IE:
var p = new Person { Name = "John", Age = 39, SSN = null };
p.Attributes.Count == 3;
// p.Attributes.Keys == { "name", "age", "ssn" };
问题
填充 ColumnSet 时遇到三个问题
- 我忘记了类/表包含哪些列
- 我用手指填充了一些列,直到运行时才出现错误
- 实例化 ColumnSet 时,列名称都必须小写,这会导致可读性差,即
thissillyexampleisntthatreadable
vsThisSillyExampleIsntThatReadable
所有这三个问题都可以通过早期绑定来解决。
我知道我可以为每个包含类的所有列的类创建一个枚举或结构,即:new ColumnSet(PersonColumns.PersonId, PersonColumns.Name, PersonColumns.Age),但我希望它使用已经生成的类.
我最好的尝试
我目前能想到的最好的是:
ColumnSetFactory.Create<Person>(p => p.PersonId = null, p.Name = null, p.Age = null);
Create 接受 T 类型的对象(本例中为 person),然后检查对象的字典以生成并返回 ColumnSet。
目标
有一个利用早期绑定类生成 ColumnSet 的通用函数:
ColumnSetFactory.Create<Person>(p => p.PersonId, p.Name, p.Age);
有任何想法吗?