C#+EntityFramework编程方式详细之Model First

时间:2022-03-16 11:38:43

Model First

Model First模式即“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在VS中通过设计对应的数据模型来生成数据库和数据类。

为了与上篇的Code First加以区分,这里新建一个控制台程序EFTest1,然后添加新建项,选择 ADO.NET实体数据模型,名称输入EFDemoDBModel

C#+EntityFramework编程方式详细之Model First

点击添加

C#+EntityFramework编程方式详细之Model First

选择 空EF设计器模型  点击完成。然后在模型设计视图中,空白处右键,添加新实体学生类(Student)和科目成绩类(SubjectScore)

C#+EntityFramework编程方式详细之Model First

C#+EntityFramework编程方式详细之Model First

点击  确定,之后在

C#+EntityFramework编程方式详细之Model First

添加其他标量属性:Name和Age(Age为Int32类型,可选中它在属性中修改);同样的方式添加第二个实体SubjectScore,并添加SubCode和SubName属性:

C#+EntityFramework编程方式详细之Model First

下面添加二者之间的关系,Student和SubjectScore是一对多的关系,Student可以通过SubjectScores属性访问SubjectScore实体,并且添加了一个外键约束到SubjectScore中:

点击空白处,右键新增---关联

C#+EntityFramework编程方式详细之Model First

C#+EntityFramework编程方式详细之Model First

C#+EntityFramework编程方式详细之Model First

经过上述操作,到目前为止Model First中的Model已经创建结束,下面就需要生成到数据库了,在模型设计视图空白处选择“根据模型生数据库(G)…”:(这里是系统默认的master数据库,可根据自己需求更改,新建连接更换数据库)

C#+EntityFramework编程方式详细之Model First

C#+EntityFramework编程方式详细之Model First

C#+EntityFramework编程方式详细之Model First

下一步

C#+EntityFramework编程方式详细之Model First

下一步,

生成数据库界面,点击完成。

点击完后之后,会打开数据库脚本,有一个对话框弹出,询问时候执行脚本,点击是即可生成数据库,

脚本:

C#+EntityFramework编程方式详细之Model First

在模型保存后,生成了数据库上下文和实体类,并且打开了建表的脚本:

C#+EntityFramework编程方式详细之Model First

说明:如果没有上述界面的话,看看模型是否保存了,点击保存,就会有了,

如果数据库中表没有生成的话,打开脚本,点击左上加的执行按钮,执行即可,之后再到数据库刷新一下,即可

C#+EntityFramework编程方式详细之Model First

数据库

C#+EntityFramework编程方式详细之Model First

经过上述操作,数据库和实体类已经全部新建完毕。

下面我们就测试一下看看,如下

C#+EntityFramework编程方式详细之Model First

注意

如果出现下面的情况,就需要在EFDemoDBModelContainer中添加DbSet<Student>,DbSet<SubjectScore>

C#+EntityFramework编程方式详细之Model First

出现上述问题,那是因为,EFDemoDBModelContainer中没有生成DbSet<Student>,DbSet<SubjectScore>,所以要手动添加

如下:

C#+EntityFramework编程方式详细之Model First

这样EFDemoDBModelContainer中才能找到Students和SubjectScores

运行结果

C#+EntityFramework编程方式详细之Model First

注意:如果我们的模型发生改变,只需要在模型设计视图中修改模型,然后保存此时实体类就会相应改变,最后在重新在模型设计视图空白处选择“根据模型生数据库(G)…”,再重新执行生成的脚本即可。