我目前正在使用.NET工具(ASP.NET,MVC)学习Web开发,我不确定我的想法是否正确。
我已经有一个我想参与的项目。它有DataBaseModel.edmx,我知道如何从这个模型生成数据库元素。 现在我需要调整DataBaseModel以满足新的需求,因此我编辑了它并希望保存我的更改以生成代码和用于为数据库添加表的新脚本,但框架希望我将我的新实体与现有表匹配。可是等等!我的表中没有这些新实体,我想创建它们,但我不能这样做,因为我需要先匹配它们!
你能指出我想要我错了吗?如何调整模型以正确更新数据库?我已经浏览了互联网,但我仍然没有明白这一点。答案 0 :(得分:1)
您正在项目中使用Database First方法,但您正在考虑使用Model First方法。
代码
•非常受欢迎,因为硬核程序员不喜欢任何类型的设计师,并且在EDMX xml中定义映射太复杂了。
•完全控制代码(没有自动生成的代码,很难修改)。
•一般的期望是你不用担心DB。 DB只是一个没有逻辑的存储。 EF将处理创作,你不想知道它是如何完成工作的。
•由于您的代码定义了数据库,因此很可能会丢失对数据库的手动更改。
数据库优先
•如果您拥有由DBA设计的DB,单独开发或者您拥有现有数据库,则非常受欢迎。
•您将让EF为您创建实体,在修改映射后,您将生成POCO实体。
•如果您想要POCO实体中的其他功能,您必须T4修改模板或使用部分类。
•可以手动更改数据库,因为数据库定义了您的域模型。您始终可以从数据库更新模型(此功能非常有用)。
•我经常在VS数据库项目中使用它(仅限Premium和Ultimate版本)。
先建模
•如果你是设计师粉丝,那么恕我直言很受欢迎(=你不喜欢编写代码或SQL)。
•你将"画"您的模型并让工作流生成您的数据库脚本和T4模板以生成您的POCO实体。您将失去对实体和数据库的部分控制权,但对于小型简易项目,您将非常高效。
•如果您想要POCO实体中的其他功能,您必须T4修改模板或使用部分类。
•由于您的模型定义了数据库,因此很可能会丢失对数据库的手动更改。如果安装了数据库生成电源组,则效果会更好。它将允许您更新数据库模式(而不是重新创建)或更新VS中的数据库项目。
答案 1 :(得分:0)
最后,我明白了问题所在。
在所有关于错误的消息中(其中大约有50个)存在两个错误,因为两个关联似乎不再是实际错误。这些关联使用的是我已从模型中删除的字段。在模型的XML视图中更容易看到它。
一旦我删除了这些冗余关联,我就能够从模型生成数据库,之后所有工作人员都很好。