【问题标题】:Create SQL Server table from user-defined class从用户定义的类创建 SQL Server 表
【发布时间】:2017-08-19 22:50:30
【问题描述】:

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

我也想使用 Native & Pure 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 数据类型之间没有集成。例如varchar、nvarchar和text都是(或映射到)string!

所以当用户创建这个类时:

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

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

最后,如果生成 SQL 查询并执行它是解决这个问题的最佳方法,您的建议是什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我应该生成用于创建表的 SQL 查询?是否有另一种解决方案而不是生成查询?因为它不准确。
    • 您的意思是您应该将DDL 发送到SQL Server 以创建表吗?是的,我相信这是唯一可行的方法。
    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多