public GetByPk Guid primaryKey where class StringBuilder sql new Strin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public T GetByPk<T>(Guid primaryKey) where T : class
{
StringBuilder sql = new StringBuilder();
//получение связей объектов с базой из таблицы, представляющей тип Т
MetaTable metaTable = BaseAction.DataContext.Mapping.GetTable(typeof(T));
//получение полей данных типа
ReadOnlyCollection<MetaDataMember> dataMembers =
metaTable.RowType.DataMembers;
//получение названия поля первичного ключа таблицы
string pk = (dataMembers.Single<MetaDataMember>(m => m.IsPrimaryKey)).Name;
sql.Append("SELECT ");
foreach (MetaDataMember dataMember in dataMembers)
{
if (null != dataMember.DbType)
sql.Append(dataMember.MappedName).Append(",");
}
sql.Remove(sql.Length - 1, 1);
sql.Append(" FROM ").Append(metaTable.TableName).Append(" WHERE ").Append(pk).Append(" = '").Append(primaryKey).Append("'");
return BaseAction.DataContext.ExecuteQuery<T>(sql.ToString()).FirstOrDefault<T>();
}