![](/img/trans.png)
[英]How can I get data type of each column in a SQL Server table/view etc. using C# Entity Framework?
[英]Get the "sql datatype" of a column created in SQL server using C# and entity framework
我有一个由 2 列组成的表tblDetails
Id INT 不为空
名称 VARCHAR(20)
通过将 EntityFramework 6 和 C# 用于我的 WPF 应用程序,我获取数据以在前端显示它。 我也想获得列的“sql 数据类型”。
这是用于数据库连接的实体模型:
public class tblDetails
{
public int Id{get; set;}
public string Name{get;set;}
}
为此,我使用了GetProperty()方法。 下面是一个代码示例:
private void GetDataType()
{
var col = typeof(tblDetails).GetProperty("Name");
string dataType = col.PropertyType.Name;
}
问题
数据类型变量被分配了值string
但我想要列的确切 Sql 数据类型,即VARCHAR(20)
我已经经历了许多如下的解决方案,但没有得到我的问题的解决方案。
如何使用 C# 实体框架获取 SQL Server 表/视图等中每列的数据类型?
有人有一个 C# 函数可以将列的 SQL 数据类型映射到它的 CLR 等效项吗?
实体框架数据注释设置 StringLength VarChar
更新
下面是我使用 Dbcontext 的类:
public class DomainService : DbContext
{
public DomainService() : base("ConnectionString")
{
Configuration.LazyLoadingEnabled = true;
#if DEBUG
Database.Log = (s) => Debug.WriteLine(s);
#endif
}
public DbSet<tblDetails> tblDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
实体框架(实际上任何“通用 ORM”)都是通用的,因此您不知何故失去了知道确切数据类型的能力。
即使您正在查看有时由不同 ORM 存储的属性或映射以在实际针对数据库执行工作之前启用某种验证 - 您也不能保证有人没有更改 SQL Server 上的架构结束 - 并没有更新模型。
在大多数情况下,这并不重要 - 使用匹配的 CLR 数据类型应该为您提供足够的信息(例如,对于用户界面的使用)。
如果您需要知道服务器存储和知道的确切数据类型,您有以下选择:
希望能帮助到你。
在反射中使用DbContext
object
代替您自己创建的model class
DomainService context = new DomainService();
private void GetDataType()
{
var col = typeof(context.tblDetails).GetProperty("Name");
string dataType = col.PropertyType.Name;
}
得到了一个解决方案:获取数据类型和长度以及VARCHAR
、 NCHAR
和NVARCHAR
类型的变量
SqlConnection connection = new SqlConnection("ConnectionString");
connection.Open();
string sqlcmnd = string.Format(
@"SELECT CASE UPPER(DATA_Type)
WHEN 'NCHAR' THEN CONCAT(UPPER(DATA_Type),'(',ISNULL(CHARACTER_MAXIMUM_LENGTH,''),')')
WHEN 'VARCHAR' THEN CONCAT(UPPER(DATA_Type),'(',ISNULL(CHARACTER_MAXIMUM_LENGTH,''),')')
WHEN 'NVARCHAR' THEN CONCAT(UPPER(DATA_Type),'(',ISNULL(CHARACTER_MAXIMUM_LENGTH,''),')')
ELSE UPPER(DATA_Type) END AS DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{0}' AND COLUMN_NAME = '{1}'", tableName, ColumnName);
SqlCommand cmd = new SqlCommand(sqlcmnd, connection);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
string dataType = reader["DATA_TYPE"].ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.