像“MS_Description”之类的东西?不,据我所知;您可以编写一个与数据库中的存储进行对话的 SP(获取数据库对象名称和列名称),并通过数据上下文进行查询 - 但没有内置任何内容。
编写一些使用的代码也很容易Expression
获取要传入的数据库名称(而不是 OO 名称)。类似于:
public static string GetProperty<TContext, TValue>(
this TContext ctx, Expression<Func<TContext, TValue>> selector,
string propertyName)
where TContext : DataContext
{
MemberExpression me = selector.Body as MemberExpression;
if (me == null) throw new InvalidOperationException();
var member = me.Member;
var objType = me.Expression.Type;
var metaType = ctx.Mapping.GetMetaType(objType);
string tableName = metaType.Table.TableName;
string columnName = metaType.GetDataMember(member).MappedName;
return ctx.GetProperty(tableName, columnName, propertyName);
}
(或类似的东西;只是启动一个测试数据库......)
您在哪里提供GetProperty
通过映射的 SPROC 的方法。
更新:是的,这有点管用;例子:
string desc = ctx.GetProperty(x => x. DataChanges.First().Change, "MS_Description");
The First()
是一种痛苦,但比必须有两个选择器要好一些;不过,它可以这样重写:
string desc = ctx.GetProperty(x => x.DataChanges, dc => dc.Change, "MS_Description");
由你决定哪一个不那么hacky。另请注意,您需要将所有者从中分离出来tableName
.