问题描述
如题,手上有一个系统是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试试看,但能否完全满足这个只能尝试了。