Rya*_*yan 7 c# sql-server entity-framework
我是SQL Server的新手,并试图弄清楚是否有办法在我创建的表和实体中获取列的数据类型.
例如,如果我有一个带有以下列的SQL Server表'Employees'
employeeID int, empName varchar(255), empDept varchar(100)
Run Code Online (Sandbox Code Playgroud)
有没有办法empName在C#/ Entity Framework中找到该字段的数据类型?
最后我要看的是数据类型和列长度.所以,如果我循环遍历表/实体中的所有字段,我希望看到:"varchar(255)","varchar(100)","int"等.
您可以创建一个存储过程并从 EF 调用该存储过程并传入表名称,或者运行如下所示的原始 sql 命令:
var sqlToRun = string.format(@"SELECT column_name as 'Column Name',
data_type as 'Data Type',
character_maximum_length as 'Max Length'
FROM information_schema.columns
WHERE table_name = '{0}'", myTableName);
using (var context = new dbContext())
{
var tableFieldDetails= context.SqlQuery(sqlToRun).ToList();
//do something with the tableFieldDetails collection
}
Run Code Online (Sandbox Code Playgroud)
...其中myTableName是要从中返回字段信息的表的名称。
请注意,如果您使用 or ,则会返回 -1 nvarchar(MAX),varchar(MAX)并且我确信可能存在一些其他异常,因为我尚未测试所有类型。
另外,我还没有测试上面的 c#,所以它可能需要调整才能工作,但原理很好,并且会受益于封装在一个好的方法中;-)
有关在 EF 中运行原始 sql 的更多信息,请参阅https://msdn.microsoft.com/en-us/data/jj592907.aspx