【EF】ModelFirst实体优先

一、前言

在前文中我们介绍了DBFirst,它要求要现有数据库, 然后通过EF映射创建实体。非常简单易学。下面给大家介绍另外一种——ModelFirst,实体优先。

二、内容介绍

Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。

通过实战演练来更好的展示:

三、实战演练

首先打开VS2012 ,选择控制台程序:

                                                    图一 选择控制台程序

第一步 添加实体

然后在项目中添加ADO实体模型:

                                                   图二 选择ADO实体模型

                                                   图三 选择ADO实体模型

选择模型类型: 这里我们选择“空EF设计器模型”,有的版本也叫做“空模型”。

                                                   图四 选择模型类型

点击完成后,生成的界面:

                                                    图五 生成的界面

在模型设计视图中,添加新实体:

                                                    图六 添加新实体

                                                    图七 添加新实体

                                                    图八 添加新实体

添加实体的属性,属性分为三种:标量属性,导航属性,复杂属性。这三种属性会在下文给大家介绍。这里我们使用标量属性,生成新属性后,选中属性,点击F4,可以设置内容。

                                                    图九 设置属性

按照同样的方法,再创建一个实体。

                                                    图十 再创建一个实体

接下来添加二者之间的关系,“user”和“card”是一对多的关系。 右击user,点击新增,关联。

                                                    图十一 添加关系

选择合适的关系:

                                                    图十二 选择合适的关系

添加完关系后的效果图:

                                                    图十三  关系后的效果图

第二步 根据模型生成数据库

确保数据库中已经存在一个空白数据库,这里我用代码建立了一个空的数据库,名字叫做EFModelFirst。

                                                    图十四  空白数据库

下面就需要生成到数据库了,在模型设计视图空白处选择“根据模型生成到数据库…”:

                                                    图十五 根据模型生成到数据库

相信大家对这个界面不陌生吧!

                                                    图十六 根据模型生成到数据库

                                                    图十七 选择数据库数据库

                                                    图十八 添加链接字符串

                                                    图十九 选择EF模型

生成数据库向导:

                                                    图二十 生成数据库向导

然后再点击完成即可,看到生成的Sql脚本:

                                                    图二十一 生成数据库SQL脚本

在空白处点击右键,选择执行,生成数据库:

                                                    图二十二  执行,生成数据库

第三步 增删改查

在类中写如下代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.Validation;

namespace EFModelFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 添加数据
            //1.声明上下文
            ModelFirstModelContainer dbContext = new ModelFirstModelContainer();
            //2.对数据库的操作,添加数据
            //2.1 实例化实体,对实体赋值
            user u = new user();

            u.Id = 1;
            u.Name = "Ares";
            u.CreateDate = DateTime.Now;
            //2.2 增
            //实体附加到上下文
            dbContext.userSet.Attach(u);
            //添加到数据库
            dbContext.Entry(u).State = EntityState.Added;
            //3. 保存
            dbContext.SaveChanges();
            #endregion

            #region 查看数据库数据
            //方法一、使用 Linq 语句查询
            card c = new card();
            //1.Linq 语句
            var item = from s in dbContext.cardSet
                       select s;
            //遍历查询出来的内容
            foreach (var cardid in item)
            {
                Console.WriteLine("Linq查询Id结果是:" + cardid.Id);
            }

            //方法二、使用lambda查询
            var itemlambda = dbContext.cardSet.Where<card>(s => s.Id == 2).FirstOrDefault();
            Console.WriteLine("lambda查询Id结果是:" + itemlambda.Id);
            #endregion

        }
    }
}

执行结果:

四、小结

通过这次的介绍,我们知道了可以通过Model实体来创建数据库,非常好的选择,希望能给大家带来帮助。下一篇会向大家介绍CodeFirst

时间: 2024-10-27 02:07:47

【EF】ModelFirst实体优先的相关文章

在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移

我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopCommerce定制项目时使用了很多EF Migrations,我必须说它在开发中有很大帮助. 今天,我将与大家分享如何在nopCommerce项目中做到这一点!我将使用nopCommerce 3.20作为例子,但你可以很容易地应用这个概念到其他的vesions! 原文链接:http://www.nopcn

(转)EF中数据优先,模型优先和代码优先

看了很多文章也不是很明白,说的都太书面化了,大家看看这图一下子就明白了,哈哈 其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不过model first模块可以自己根据需要创建和修改实体,显得更加灵活. codefist是一个class代码文件,它可以由一些第三方的软件可视化的创建,也是非常灵活的一种方式,目前被使用也是最广泛的. 二.Entity Framework Database first(数据库优先)使用过程 2.

EF多实体对应单表

1.EF多实体对应单表 适用场景:单数据库表,表数据有较长用字段,有不常用或者大数据字段. 2.建表语句 CREATE TABLE [Chapter2].[Photograph]( [PhotoId] [int] IDENTITY(1,1) primary key NOT NULL, [Title] [varchar](50) NOT NULL, [ThumbnailBits] [image] NOT NULL, [HighResolutionBits] [image] NOT NULL ) 3

EF之ModelFirst实体先行

继上篇博文中写到了DBFirst,下面就来讲讲关于ModelFirst知识,ModelFirst顾名思义,实体先行!      适用于在设计实体初期, 没有数据库表的原型,这样开发者在设计实体的同时可以生成数据库表,一举两得.下面就来讲讲ModelFirst的步骤: 首先建立一个控制台应用程序(和DBFirst的步骤相似) 新建如下图: 添加新建项-选择ADO.NET实体数据模型: 这里和DBFirst不一样,因为ModelFirst没有数据库,选择空模型:  如下图所示: 在空白处右键,选择实

C# CodeFirst(EF框架)代码优先创建数据库

namespace WebEF.Model{ public class ModelContext:DbContext //继承DBcontext 来自EF框架 { public ModelContext() : base("name=配置文件名") { //读取配置文件 /*配置文件的设置格式 <connectionStrings> <add name="配置文件名" connectionString="Data Source=(. .l

EF生成实体自动添加数据库字段注释

我们在用EF从数据库生成模型的时候,默认实体类是没有注释的,但是我们已经在数据库字段添加说明了,能不能自动把注释也拿过来? 答案是:能. 那么我们开始 首先随便开一个ASP.NET   MVC项目,我们添加ADO实体数据模型.添加完成后我们打开userinfo.cs(这里我的模型名称为userinfo)如图: 双击打开后发现现在是没有注释的. 然后下载此文件:GetSummery.ttinclude (这个文件没有放下载链接,可以去网上找找,也可以给我留言评论我来给你) 嗯,现在下载完文件后把他

EF的代码优先设计

CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是Model层 学生表 using System; using System.Collections.Generic; using System.Linq; using System.Web; /**/ using System.ComponentModel.DataAnnotations;//验证 n

EF生成实体模板改良

也许介绍的方法并不是完美的解决方法 web工程里添加这两项 里面会生成两个模板文件 上下文模板和实体类模板,现在主要对实体类模板进行改良 1.讲using 放在文件头 <#=codeStringGenerator.UsingDirectives(inHeader: true)#>  false改为true 添加 public void WriteHeader(CodeStringGenerator codeStringGenerator, EntityFrameworkTemplateFile

EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)

自己写实体可以完美解决这个问题. 用匿名类型也可以. 设置上下文方法如下: (jz为数据库上下文对象) jz.Configuration.ProxyCreationEnabled = false;jz.Configuration.LazyLoadingEnabled = false; 不用这个的原因是Virtual属性也会生成.(只是占个位,[]里面没内容,但看着不爽) 我采用的方法是过滤掉Virtual属性的方法: 一个基于Json.net的类 public class LimitPropsC