C#+EntityFramework编程方式详细之Model First
Model First
Model First模式即“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在VS中通过设计对应的数据模型来生成数据库和数据类。
为了与上篇的Code First加以区分,这里新建一个控制台程序EFTest1,然后添加新建项,选择 ADO.NET实体数据模型,名称输入EFDemoDBModel
点击添加
选择 空EF设计器模型 点击完成。然后在模型设计视图中,空白处右键,添加新实体学生类(Student)和科目成绩类(SubjectScore)
点击 确定,之后在
添加其他标量属性:Name和Age(Age为Int32类型,可选中它在属性中修改);同样的方式添加第二个实体SubjectScore,并添加SubCode和SubName属性:
下面添加二者之间的关系,Student和SubjectScore是一对多的关系,Student可以通过SubjectScores属性访问SubjectScore实体,并且添加了一个外键约束到SubjectScore中:
点击空白处,右键新增---关联
经过上述操作,到目前为止Model First中的Model已经创建结束,下面就需要生成到数据库了,在模型设计视图空白处选择“根据模型生数据库(G)…”:(这里是系统默认的master数据库,可根据自己需求更改,新建连接更换数据库)
下一步
下一步,
生成数据库界面,点击完成。
点击完后之后,会打开数据库脚本,有一个对话框弹出,询问时候执行脚本,点击是即可生成数据库,
脚本:
在模型保存后,生成了数据库上下文和实体类,并且打开了建表的脚本:
说明:如果没有上述界面的话,看看模型是否保存了,点击保存,就会有了,
如果数据库中表没有生成的话,打开脚本,点击左上加的执行按钮,执行即可,之后再到数据库刷新一下,即可
数据库
经过上述操作,数据库和实体类已经全部新建完毕。
下面我们就测试一下看看,如下
注意
如果出现下面的情况,就需要在EFDemoDBModelContainer中添加DbSet<Student>,DbSet<SubjectScore>
出现上述问题,那是因为,EFDemoDBModelContainer中没有生成DbSet<Student>,DbSet<SubjectScore>,所以要手动添加
如下:
这样EFDemoDBModelContainer中才能找到Students和SubjectScores
运行结果
注意:如果我们的模型发生改变,只需要在模型设计视图中修改模型,然后保存此时实体类就会相应改变,最后在重新在模型设计视图空白处选择“根据模型生数据库(G)…”,再重新执行生成的脚本即可。