我是SQL Server的新手,并试图弄清楚是否有办法在我创建的表和实体表中获取列的数据类型。
例如,如果我有一个SQL Server表'Employees',其中包含以下列
employeeID int, empName varchar(255), empDept varchar(100)
有没有办法在C#/ Entity Framework中找到empName
字段的数据类型?
最后我要看的是数据类型和列长度。所以,如果我循环遍历表/实体中的所有字段,我希望看到:“varchar(255)”,“varchar(100)”,“int”等。
答案 0 :(得分:0)
您可以创建一个存储过程并从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
}
...其中myTableName
是要从中返回字段信息的表的名称。
请注意,如果您使用nvarchar(MAX)
或varchar(MAX)
,则会返回-1,并且我确定可能存在其他异常情况,因为我尚未测试所有类型。
此外,我还没有对上面的c#进行测试,因此可能需要调整才能工作,但原理很好,并且可以通过封装在一个很好的方法中受益; - )
有关在EF中运行原始sql的更多信息,请参阅https://msdn.microsoft.com/en-us/data/jj592907.aspx