从用户定义的类创建SQL Server表

时间:2017-03-27 09:38:32

标签: c# sql sql-server orm ado.net

我正在创建一个迷你ORM来更好地学习C#中的反射。

我也想使用 Native&纯C#,不要使用实体框架或SQL Server Management Objects

public static void CreateTable(Type tableType, string connectionString)
{
     // codes to create table in database
}

问题是CreateTable方法,其中存在很多问题,例如:

  • 我找不到任何从用户定义的类创建表的标准方法。 How can I generate database tables from C# classes?:这个解决方案很好但不理想。也许它在某些情况下会崩溃。

  • 数据类型!
    C#和SQL Server数据类型之间没有集成。例如varcharnvarchartext都是(或映射到)string

因此,当用户创建此类时:

public class Person
{        
   public int ID { get; set; }        
   public string Name { get; set; }
}

我应该将哪个SQL Server数据类型用于Name

最后,如果生成SQL查询并执行它是此问题的最佳方式,那么您的建议是什么?

1 个答案:

答案 0 :(得分:3)

  

我应该为Name ???使用哪种SQL类型

如果您要查看实体框架作为示例,默认情况下,他们会在所有情况下将System.String映射到NVARCHAR(MAX)。在Code First实体模型中使用属性属性(例如[Column(DbType = "CHAR(10)")]允许开发人员明确指定列类型。

也许你可以遵循这种方法,默认为所有字符串包含NVARCHAR(MAX),并在特殊情况下在ORM中创建一些简单属性。毕竟,你不会知道字符串长度,直到运行时。