请问怎么从C#的model类创建数据库表?

问题描述

如题,手上有一个系统是MVC架构的,但只拷贝了C#代码,没有拷贝数据库表,所以现在为了使程序能够运行得起来,需要还原数据库结构,查遍网上资料只有从数据库生成model的,并没有倒过来的实现,但我觉得应该是可以的,请教C#高手?问题解决程序能够运行送100分!

解决方案

解决方案二:
你需要学习了解一下EntityFramework相关知识。
解决方案三:
楼上的童鞋,本系统未使用EF,与数据库交互使用的Linq查询,使用EF又省事儿了。
解决方案四:
如果Model是POCO,并且与数据库一一对应,那用PD设计一下也不是难事啊
解决方案五:
如果表不复杂,根据edmx手工建表也很快就能搞定。
解决方案六:
看你原来系统使用的框架,实体框架可以生成数据库,lingtosql就不能了
解决方案七:
引用4楼caozhy的回复:

如果表不复杂,根据edmx手工建表也很快就能搞定。

里面没有使用ef,所以找不到edmx文件,另外此系统相当庞大,里面有几百个表,请问如何手工建表?
解决方案八:
引用5楼cdygf的回复:

看你原来系统使用的框架,实体框架可以生成数据库,lingtosql就不能了

没有使用EF实体框架,但里面有实体类,它的开发模式是mvc的,与数据库交互用的linq
解决方案九:
根据实体类用PD创建下数据字典呗
解决方案十:
反射实体类,拼接create的sql,前提是你了解主键规则,其它约束什么的都不是大问题
解决方案十一:
linqtosql的话,DataContext有DatabaseExists()判断数据库是否存在和CreateDatabase()创建数据库方法
解决方案十二:
BaiduCodeFirst.
解决方案十三:
如果都是简单增删改查,还好办,自己看都执行了什么,然后对应的去建表就好了,外键什么的不建立也不影响访问问题如果是里面有视图,有存储过程,你没法猜里面到底干了些什么
解决方案十四:
Module无法完整体现表的结构,只能根据你自己的理解去建表
解决方案十五:
如果不是EFORM架构的话就算有C#代码估计也不太好还原数据库的。
解决方案:
model跟数据库表并不保证是一一对应的,要看你的DAL是如何写的,DAL才是model与关系数据库的桥梁——ORM。而model跟DAL并不是同一个东西。如果你重写DAL,很容易,直接(进行少量修改而)使用EF就行了。如果不重写DAL,那么你需要读懂你自己的DAL。
解决方案:
引用15楼sp1234的回复:

model跟数据库表并不保证是一一对应的,要看你的DAL是如何写的,DAL才是model与关系数据库的桥梁——ORM。而model跟DAL并不是同一个东西。如果你重写DAL,很容易,直接(进行少量修改而)使用EF就行了。如果不重写DAL,那么你需要读懂你自己的DAL。

]就算是读懂了DAL,最多也就是定义一些表结构,让程序运行起来不马上崩溃DAL层如果是访问视图,没办法确定它的数据到底是从哪几个表里来的,你只能单独定义一个表去放这些东西而且存储过程什么的,你也没法知道它到底干什么了所以所谓跑起来,仅限于不报错,你想跟原来一样执行是不太现实的
解决方案:
这就好像我弄到一个程序,里面加载了dll用到了哪些函数我是知道的,参数类型也都知道我可以自己做个dll然后定义这些函数,然后重新引用进来,程序就不会崩溃但是执行的时候,具体函数里面到底干了什么,没办法知道
解决方案:
mvc不懂如果是常规的每个库表应该会对应一个表对象类设置一大堆属性字段应该都在那些类里面已经包含在代码中了
解决方案:
新建DataContext类关联实体,系统将在首次运行时自动生成数据库。
解决方案:
引用16楼Z65443344的回复:

Quote: 引用15楼sp1234的回复:
model跟数据库表并不保证是一一对应的,要看你的DAL是如何写的,DAL才是model与关系数据库的桥梁——ORM。而model跟DAL并不是同一个东西。如果你重写DAL,很容易,直接(进行少量修改而)使用EF就行了。如果不重写DAL,那么你需要读懂你自己的DAL。

]就算是读懂了DAL,最多也就是定义一些表结构,让程序运行起来不马上崩溃DAL层如果是访问视图,没办法确定它的数据到底是从哪几个表里来的,你只能单独定义一个表去放这些东西而且存储过程什么的,你也没法知道它到底干什么了所以所谓跑起来,仅限于不报错,你想跟原来一样执行是不太现实的

如果DAL里面还有一些是返回DataTable、dataset的,就更不知道原来的表是怎么回事了。就是用了ef,也没法保证所有的表都map了呀。
解决方案:
引用15楼sp1234的回复:

model跟数据库表并不保证是一一对应的,要看你的DAL是如何写的,DAL才是model与关系数据库的桥梁——ORM。而model跟DAL并不是同一个东西。如果你重写DAL,很容易,直接(进行少量修改而)使用EF就行了。如果不重写DAL,那么你需要读懂你自己的DAL。

目录结构里面有DAL文件夹,我在论坛经常看到你,我看你的等级是T12,是否是一枚高手?有没有兴趣看看这个让人崩溃一千次的庞大又复杂的系统?
解决方案:
我觉得,你还是再去拷贝一个数据库吧。
解决方案:
引用22楼zhi_ai_yaya的回复:

我觉得,你还是再去拷贝一个数据库吧。

你觉得我要是能把数据库弄到手还费这心思干嘛?不是多此一举吗?
解决方案:
如果是非EF的话,要看实体类是怎么写的。如果是有特性的话,或者有辅助的映射类的话可以通过这个来生成SQL语句,不过这个要取决于特性或者映射类的丰富程度,比如精确到数据类型长度,可空等等。当然,最好还是去找回数据库,因为这样子生成SQL还是需自己写代码(VS里提供的建模工具是否能实现从实体类DAOSQL这个要看看)。
解决方案:
引用23楼yongmzpanakx的回复:

Quote: 引用22楼zhi_ai_yaya的回复:
我觉得,你还是再去拷贝一个数据库吧。

你觉得我要是能把数据库弄到手还费这心思干嘛?不是多此一举吗?

我的意思是,从源代码还原数据库是一种办法,但是既然能搞到C#源码,有没有可能性再搞到数据库?这是最简单直接的完美解决办法。实在没有这种可能性,那就慢慢从源码中还原吧,手动建表,几百个表也不算多,这点时间相对整个系统的价值来说,还是值的。
解决方案:
EF的codefirst试试看,但能否完全满足这个只能尝试了。

时间: 2024-08-24 23:08:44

请问怎么从C#的model类创建数据库表?的相关文章

hibernate 根据持久化类 创建数据库表的时候出现的错误如下,请大神帮忙解决?

问题描述 hibernate 根据持久化类 创建数据库表的时候出现的错误如下,请大神帮忙解决? 十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata 信息: table not found: DIC_TAB 十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata 信息:

python-django的model不能创建对应表

问题描述 django的model不能创建对应表 我的python的版本是3.4django的版本是1.7.2 这个是我的models.py文件 from django.db import models class Test(models.Model): name = models.CharField(max_length=100) def unicode(self): return self.name 但是python manage.py syncdb同步数据库之后没有出现blog_test表

Myeclipse中,利用JPA普通类建立数据库表,改如何操作

问题描述 Myeclipse中,利用JPA普通类建立数据库表,改如何操作?急需... 解决方案 解决方案二:改什么操作,请问你创建表是用注解方式还是xml格式?解决方案三:该如何操作,就是单个类转成JPA实体,比如我新建一个user类,设置属性username,password,并且设置了getset方法,然后如何利用myeclipse工具让它转成JPA实体类?解决方案四:注解完后在xml继续配置,问题是myeclipse该如何操作...

php-用PHP创建数据库表总是失败,代码如下,跪求大神。。

问题描述 用PHP创建数据库表总是失败,代码如下,跪求大神.. <?php$con = mysql_connect(""localhost""root""xxh2011010015"");if (!$con) { die('Could not connect: ' . mysql_error()); } // Create table in my_db databasemysql_select_db("&quo

PHP MySQL入门教程之创建数据库/表及保存数据

具体如下 为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数.此函数用于向 MySQL 连接发送查询或命令. 例子 在下面的例子中,我们创建了一个名为 "my_db" 的数据库:  代码如下 复制代码 <?php $con = mysql_connect("localhost","peter","abc123"); if (!$con)  {  die('Could not connect:

JBuilder2005实战JSP之创建数据库表(8)

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

JSP实战:JBuilder2005中创建数据库表

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

JBuilder2005实战JSP之创建数据库表

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

创建数据库表

  在使用数据库的过程中,接触最多的就是数据库中的表.表是数据存储的地方.是数据库中最重要的部分,管理好表也就管理好了数据库.本章将介绍如何创建和管理数据库表. 表是由行和列组成的.创建表的过程主要就是定义表的列的过程,为此,应先了解表的列的属性. 7.1.1 列的属性    表的列名在同一个表中具有惟一性,同一列的数据属于同一种数据类型.除了用列名和数据类型来指定列的属性外,还可以定义其它属性:NULL 或NOT NULL 属性和IDENTITY 属性. (1) NULL 或NOT NULL如