【发布时间】:2012-07-31 21:52:35
【问题描述】:
背景
我正在使用 Microsoft Dynamics CRM 2011 QueryExpressions,对于所有非 CRM 人员来说,只要知道我正在使用 SDK 来访问需要您输入列的字符串名称的数据库您正在自定义 ColumnSet 类中进行选择:
new ColumnSet("personid", "name", "age");
SDK 确实生成了早期绑定的类,因此我确实为所有数据库表提供了类,并且早期绑定的类都有一个字典,其键是已在对象上填充的表的列。即:
var p = new Person { Name = "John", Age = 39, SSN = null };
p.Attributes.Count == 3;
// p.Attributes.Keys == { "name", "age", "ssn" };
问题
我在填充 ColumnSet 时遇到三个问题
- 我忘记了类/表包含哪些列
- 我在某些列上加粗,直到运行时才出现错误
- 在实例化 ColumnSet 时,列名称都必须小写,这会导致可读性差,即
thissillyexampleisntthatreadable与ThisSillyExampleIsntThatReadable
所有这三个问题都可以通过早期绑定来解决。
我知道我可以为每个包含类的所有列的类创建一个枚举或结构,即: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);
有什么想法吗?
【问题讨论】: