gpt4 book ai didi

entity-framework - 如何在代码中从 EDMX 模型获取字符串的最大长度?

转载 作者:行者123 更新时间:2023-12-03 07:35:40 26 4
gpt4 key购买 nike

我已经从我正在编程的数据库创建了一个 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;
}

怎么写呢?

更新:我想指出,下面的答案中提到的IObjectContextAdapter位于System.Data.Entity.Infrastruct中命名空间。

最佳答案

以下是读取元数据的两种方法:

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);
}

因此,您可以输入表名称和属性名称,或者指定您感兴趣的属性的表达式。

另一种方法可能是创建一个 MetaData 类并使用 MaxLength 属性。

关于entity-framework - 如何在代码中从 EDMX 模型获取字符串的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27024764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com