我正在创建一个迷你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数据类型之间没有集成。例如varchar
,nvarchar
和text
都是(或映射到)string
!
因此,当用户创建此类时:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
}
我应该将哪个SQL Server数据类型用于Name
?
最后,如果生成SQL查询并执行它是此问题的最佳方式,那么您的建议是什么?
答案 0 :(得分:3)
我应该为Name ???使用哪种SQL类型
如果您要查看实体框架作为示例,默认情况下,他们会在所有情况下将System.String
映射到NVARCHAR(MAX)
。在Code First实体模型中使用属性属性(例如[Column(DbType = "CHAR(10)")]
允许开发人员明确指定列类型。
也许你可以遵循这种方法,默认为所有字符串包含NVARCHAR(MAX)
,并在特殊情况下在ORM中创建一些简单属性。毕竟,你不会知道字符串长度,直到运行时。