Dan*_*don 6 entity-framework edmx
我从我正在编程的数据库中创建了一个EDMX对象.
我需要从用户那里获得输入并将其保存到数据库表中的一行.问题是我需要将输入字符串的长度限制为数据库中相应VARCHAR列的宽度.
当我浏览模型时,我可以在属性窗口中清楚地看到模型知道字符串的最大长度,但我不知道如何在代码中访问这些数据.
如果我想写这样的东西:
Entities entities = new Entities();
myTable = entities.myTable.First();
if (userInput.length > myTable.columnA.MaxLength)
{
// tell the user that the input is too long.
}
else
{
myTable.columnA = userInput;
}
Run Code Online (Sandbox Code Playgroud)
我怎么写呢?
更新:我想指出IObjectContextAdapater
下面的答案中提到的是在System.Data.Entity.Infrastructure
命名空间中.
Ger*_*old 11
以下是两种可以读取元数据的方法:
int? GetMaxLength(DbContext context, string tableName, string propertyName)
{
var oc = ((IObjectContextAdapter)context).ObjectContext;
return oc.MetadataWorkspace.GetItems(DataSpace.CSpace).OfType<EntityType>()
.Where(et => et.Name == tableName)
.SelectMany(et => et.Properties.Where(p => p.Name == propertyName))
.Select (p => p.MaxLength)
.FirstOrDefault();
}
int? GetMaxLength<T>(DbContext context, Expression<Func<T, object>> property)
{
var memberExpression = (MemberExpression)property.Body;
string propertyName = memberExpression.Member.Name;
return GetMaxLength(context, typeof(T).Name, propertyName);
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以输入表名和属性名,也可以输入指定您感兴趣的属性的表达式.
另一种方法可能是创建一个MetaData类并使用该MaxLength
属性.
归档时间: |
|
查看次数: |
4965 次 |
最近记录: |