SQL Server数据库架构能否从.NET类生成

SQL Server数据库架构能否从.NET类生成,.net,sql-server,database-schema,.net,Sql Server,Database Schema,我有一些不使用数据库的旧代码。现在可以从现有类自动生成数据库模式了吗?我知道这似乎与通常的DB类生成相反 但如果有一些简单的方法可以做到这一点,那就太好了。事实并非如此。或者,只是以一种非常愚蠢的方式。没有附加注释.NET包含的信息比db模式少得多。情况、检查正在减少。数据类型也丢失了。你认为这样的代码会扣除哪些指标?见鬼,即使找到类/表的主键也是不可能的 继承是另一个话题 您可以先生成一个模式,但如果不对类进行大量注释,就无法真正生成一个可用于生产的数据库。事实并非如此。或者,只是以一种非常愚

我有一些不使用数据库的旧代码。现在可以从现有类自动生成数据库模式了吗?我知道这似乎与通常的DB类生成相反


但如果有一些简单的方法可以做到这一点,那就太好了。

事实并非如此。或者,只是以一种非常愚蠢的方式。没有附加注释.NET包含的信息比db模式少得多。情况、检查正在减少。数据类型也丢失了。你认为这样的代码会扣除哪些指标?见鬼,即使找到类/表的主键也是不可能的

继承是另一个话题


您可以先生成一个模式,但如果不对类进行大量注释,就无法真正生成一个可用于生产的数据库。

事实并非如此。或者,只是以一种非常愚蠢的方式。没有附加注释.NET包含的信息比db模式少得多。情况、检查正在减少。数据类型也丢失了。你认为这样的代码会扣除哪些指标?见鬼,即使找到类/表的主键也是不可能的

继承是另一个话题


您可以先生成一个模式,但如果不对类进行大量注释,就无法真正生成一个可用于生产的数据库。

当然,稍加思考,您可以生成一些粗略的表创建脚本,甚至可以生成支持插入/更新/删除的存储过程(如果您愿意)

除非存在精确的一对一映射,否则需要手动清理这些脚本

编辑:进一步阐述(结合@TomTom的回答)

难以/不可能自动推断的事情:

  • 默认列值
  • 计算列(如有)
  • varchar大小
  • 空/非空列
  • 索引
您可以通过大量工作自动完成的事情(但在我看来,最好是手工完成):

  • 主键分配
  • 外键关系
  • 关系

当然,只要稍加思考,您就可以生成一些粗略的表创建脚本,甚至可以生成支持插入/更新/删除的存储过程(如果您愿意)

除非存在精确的一对一映射,否则需要手动清理这些脚本

编辑:进一步阐述(结合@TomTom的回答)

难以/不可能自动推断的事情:

  • 默认列值
  • 计算列(如有)
  • varchar大小
  • 空/非空列
  • 索引
您可以通过大量工作自动完成的事情(但在我看来,最好是手工完成):

  • 主键分配
  • 外键关系
  • 关系

如果您使用的是VS2010,您可能希望使用Entity Framework进行代码优先开发,您的类继承自DbContext。ScottGu有一篇关于如何做到这一点的很好的博客文章。

如果您使用的是VS2010,您可能想看看使用Entity Framework的代码优先开发,您的类继承自DbContext。ScottGu有一篇关于如何做到这一点的很好的博客文章。

+1-除非数据库中充满了null和varchar(max)列,否则有很多工作需要手工完成(正如我在回答中指出的)。实际上,我可以从某个起点开始,可能没有生产准备就绪,可能没有PK或条件检查等。只有默认名称和列的数据类型,如果可能的话,如果他将类重构为LINQ to SQL实体或ADO.NET EDM实体,他可以使用属性指定数据库类型和一些约束。然后可以通过编程方式创建数据库。然而,这可能不会节省任何时间+1-除非数据库中填充了null和varchar(max)列,否则手工操作会有很多工作要做(正如我在回答中指出的)。实际上,我可以从某个起点开始,可能还没有准备好生产,可能没有PK或条件检查等。只需要默认名称和列的数据类型,如果他将类重构为LINQ to SQL实体或ADO.NET EDM实体,他可以使用属性指定数据库类型和一些约束。然后可以通过编程方式创建数据库。然而,这可能不会节省任何时间。是的,有没有开始使用反射来实现这一点?或者我必须写代码。嗯,我知道这不是一个干净的工作,即使没有注释也不可能,但只是以防万一,如果有什么工具可以这样做。@Munish-您可以编写一个简单的方法,将类型作为参数,枚举所有公共属性,并将创建脚本转储到文本文件中。如果你没有使用反射,这真的不难。从一个类型对象开始,它的接口是一个漂亮的对象(如“GetProperties()”方法)将为您获得所需的成员。是的,是否有任何使用反射的起点?或者我必须编写代码。好吧,我知道这不是一项干净的工作,即使没有注释也不可能,但以防万一,如果有工具可以这样做。@Munish-您可以编写一个简单的方法,将类型作为参数,枚举所有类型公共属性,并将创建脚本转储到文本文件中。如果您没有使用反射,这真的不难。从类型对象开始,它的接口是漂亮的对象(像“GetProperties()”这样的方法将为您提供所需的成员。您可以先创建一个新的实体框架4“模型”建模并将您的.NET类转移到其中,然后从中生成SQL DDL语句-但这需要相当多的额外工作(设置所有数据库属性和定义FK关系等等)@marc_s:ER代码是否首先允许他直接从POCO转到DB模式?您可以创建一个新的