实体框架 - 获取SQL Server字段数据类型

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"等.

NER*_*808 1

您可以创建一个存储过程并从 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