首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ASP.NET MVC5高级编程——(3)MVC模式的模型

5 什么是实体框架,什么是代码优先和数据上下文? 新建的ASP.NET MVC5项目会自动包含对实体框架(EF)的引用。...这个MvcMusicStoreDB是继承了DbContext,其作用概括来说:对模型类的修改会反映到数据库中,反之亦然,对数据库的修改也会反映到模型类中。EF实体框架会使用数据迁移来帮我们完成。...4.执行基架代码 4.1用实体框架创建数据库--local-DB虚拟数据空间 EF框架的代码优先方法会尽可能地使用约定而非配置(即MVC中的约定优于配置)。...4.2使用数据库初始化器--每次插入初始数据-方便项目测试 保持数据库和模型变化同步的一个简单方法是允许实体框架重新创建一个现有的数据库。...第二种解决方案:强类型模型,创建一个视图特定模型的对象,将专辑信息、流派和艺术家信息传递给一个视图。

4.8K40

Entity Framework 4.1 Code-First 学习笔记

即使复杂类型的所有属性都是可空的,你也不能将整个复杂类型的对象设为 null, 例如,在这种情况下,即使街道的名称和街道的号码不是必填的,也不能有一个住宅的地址为 null,需要创建一个所有属性都是 null...同样的道理,当你获取一个实体的时候,即使所有的属性都是 null ,EF4.1 也将会创建一个复杂类型的对象。...,例如,一个订单都有哪些员工参与,一个员工参与过哪些订单,这就需要在原有的订单类中加入员工的实体列表,并在员工实体中加入订单的实体列表。...DbContext.Database.SqlQuery:这个方法将返回的数据集映射到相应的对象,而不去管这个对象是不是实体。重要的是 EF 不会跟踪返回的对象,即使他们是真正的实体对象。   ...另外一个 EF 映射管理的方法是使用 Entity SQL,这种方式是 EF 将实体模型转换为物理模型,然后将Linq查询添加到物理模型中,最后将物理模型转换为数据库存储的查询。

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MVC3教程之实体模型和EF CodeFirst

    EF支持一个被称之为“code-first”的开发范例。Code-first允许你通过书写一些简单的类来创建模型对象,而不用关心这些类的持久化。...Books属性表示数据库中的数据集实体,用来处理数据的存取与更新。BookDbContext派生自DbContext,需要添加System.Data.Entity的引用。...,将控制器的名称修改为“BookController”,基架选择中的模板选择“空控制器”,如下图: ?   ...在完成数据读取后,将数据转换为实体对象集合。EF对数据库的操作大致如此。   ...7.设置实体模型的数据验证   在ASP.NET MVC中,有一条作为核心的原则,就是DRY(“Don’t Repeat Yourself,中文意思为:不要让开发者重复做同样的事情,即“一处定义、处处可用

    1.3K20

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

    多出来的对事务、连接池、迁移、种子数据等一些功能 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好 Repository 仓储 在领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点...集中数据库访问逻辑 24.jpg UnitOfWork 工作单元 一个工作单元在一个事务范围内保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库 DB Context 与...DB Set DB Context(UnitOfWork 工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的...ORM 框架 EF Core快速开始示例 创建一个空的 web api 项目 添加 Pomelo.EntityFrameworkCore.Mysql 的 nuget 包引用 创建实体 创建 DbContext...配置连接字符串并且注入 DbContext 使用 DbContext 完成数据查询与插入 创建实体 Entity namespace LighterApi.Data { public class

    95511

    EF简介

    EF:EF是 asp.net的一套ORM框架....,不管你添加什么样的数据库实体,都会自动继承Dbcontext这个类,所以Dbcontext:这个类就是实现关系型数据库和面线对象交互的通用数据接口。...错误的原因我们来分析下: 经过调试代码我们发现,当我们第一次new T_ConsultingList对象时,这个对象为空,当我们使用ef添加完数据后,再去观察这个对象我们会发现,这个对象里面已经有值了,...而里面的值就是我们刚才所添加的值,说明在我们执行完数据库添加操作之后,数据库里面的数据马上将我们所添加的数据马上映射给了当前的实体对象,所以当我们在下面指定需要修改的记录的主键时,如果修改和添加共用同一个对象...3、当我们在操作完数据库对应的表示表实体后,执行dbContext.SaveChanges()后,编译器报一个实体或多个实体验证失败!

    1.4K80

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

    多出来的对事务、连接池、迁移、种子数据等一些功能 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好 Repository 仓储 在领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点...UnitOfWork 工作单元 一个工作单元在一个事务范围内保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库 DB Context 与 DB Set DB Context(UnitOfWork...工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的 ORM 框架 EF Core快速开始示例 创建一个空的...web api 项目 添加 Pomelo.EntityFrameworkCore.Mysql 的 nuget 包引用 创建实体 创建 DbContext 配置连接字符串并且注入 DbContext 使用...DbContext 完成数据查询与插入 创建实体 Entity namespace LighterApi.Data { public class Entity { //

    82310

    【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

    是一个关键组件,它负责将 EF Core 的通用功能与具体的数据库引擎进行连接。...ORM 的主要目的是在关系数据库和业务实体对象之间做一个映射,使得开发者可以使用面向对象的方式来操作数据库,而不必直接编写 SQL 语句。...ORM 的核心概念包括: 对象(Objects): 在应用程序中表示业务实体。 关系(Relationships): 对象之间的交互和联系,例如一对多、一对一或多对多关系。...ORM 映射器(Mapper): 负责将对象映射到数据库中的表,以及将对象的属性映射到表的列。 ORM 框架的主要优点包括: 提高了开发效率,因为开发者可以用熟悉的面向对象的方式来操作数据库。...每次你修改数据模型并保存这些变更时,EF Core 都会创建一个新的迁移。 迁移历史记录:迁移历史记录是数据库中存储的迁移列表,它记录了应用于数据库的每个迁移。

    62000

    EntityFramework 外键值映射

    Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结 在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究...我的整个实体框架的学习和研究,是以我的Winform框架顺利升级到这个实体框架基础上为一个阶段终结,这个阶段事情很多,从开始客运联网售票的WebAPI平台的开发,到微软实体框架的深入研究,以及《基于Metronic...所以将datetime2类型的数据添加到数据库中datetime类型的字段里去,就会报错并提示转换超出范围。...C#代码中 将原本是DateTime类型的字段修改为DateTime?类型,由于可空类型的默认值都是为null,所以传入数据库就可以不用赋值,数据库中的datetime类型也是支持null值的。...在实体框架界面层的查询中,我们也不在使用部分SQL的条件做法了,采用更加安全的基于DTO的LINQ表达式进行封装,最后传递给后台的也就是一个LINQ对象(非传统方式的实体LINQ,那样在分布式处理中会出错

    4.2K50

    UnitOfWork知多少

    UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。...UOW的本质 通过以上的介绍,我们可以总结出实现UOW的几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到的已变更的对象保存到变更列表中 UOW借助事务一次性提交变更列表中的所有更改...EF中的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...这样就形成了一条链:Uow->仓储-->聚合-->实体和值对象。即Uow负责管理仓储处理事务,仓储管理单一聚合,聚合又由实体和值对象组成。 下面我们就先来定义实体和值对象,这里我们使用层超类型。...就是整个调用链上的需要注入的同类型对象,使用是同一个类型实例。 4.7.

    2.4K81

    02-EF Core笔记之保存数据

    状态断开对象的处理 EF Core判断更新或添加数据是通过ChangeTrancker来进行的,这个操作需要在同一个DbContext中进行,而web应用通常先查询到数据,然后将数据发送到客户端进行相应的操作...,随后再由客户端提交到服务器端,此时实体所在的DbContext已发生变化,如何判断对实体进行更新或添加就成了一个问题。...并且,对于这种情况,可直接使用DbContext的Update操作进行,在Update操作内部会完成该判断。 如果实体的主键不是自动生成的,则需要手工判断实体是否存在。...对于依赖关系的操作,同样遵循以上几种方式。 删除操作 对于删除操作,如果是删除一个对象,则可以明确该对象的主键,并从数据库中移除,此种情况不进行探讨。...例如Blog对象中有多个Post对象,如果从Blog中删除部分Post,则意味着直接移除了Post对象,此时如果是断开连接的情况,则EF Core无法跟踪到Post实体列表的变更,从而导致无法正确的处理删除

    1.8K40

    领域驱动设计案例之仓储顶层实现

    在业务中,我们会涉及到对象的创建、重建、更新、销毁等操作,这些操作通常需要持久化到数据库中,我们通过仓储来实现对数据的访问 1.首先我们要实现仓储上下文,仓储上下文主要是维护一些创建、更新、销毁的对象列表...,未来可以实现批量持久化,从而保持多实体与多聚合的事务,从而实现内部一致性和外部一致性: using Order.Domain.Aggreate; using Order.Domain.Repository...); //创建的对象添加到集合中,并且设置状态为未提交 localcommitted.Value = false; }...)) throw new InvalidOperationException("此对象正在被删除,不能添加到更新集合中");...,所以我们实现一个EF的仓储上下文,使用EF的机制来维护与提交: using Order.Domain.Model; using System.Threading; using System.Data.Entity

    1.1K50

    Entity Framework复杂类型属性映射

    注意: 复杂类型检测要求该类型不具有引用实体类型的属性,还要求不可引用另一类型的集合属性 复杂类型的在数据库中映射的列名称为:负载类型类名_属性名 我们接下来创建 DbContext 类 public...()); } public DbSet Users { get; set; } } 创建完DbContext类后,我们编写将数据存入数据库的方法:...,应该在实体的构造函数中初始化复杂类型; 将制度属性添加到复杂类型中时,需进行空值检查; 尽量显式注册复杂类型。...所谓原始值就是从数据库查询出来的值,当前值就是实体目前的值。入口点是 DbContext的Entry方法,返回对象类型是 DbEntityEntry 。...从上面的讲解我们卡一看到,用复杂类型很双,一直用一直爽,但是复杂类型还是有他的限制的: 不能共享引用:因为没有主键标识,不能被自身实例之外的任何对象引用; 没有优雅的方式标识空引用:即使查询出的数据为空

    69510

    .net EF 新手教程

    ,我们主要使用到LINQ进行查询efdb.Students相当于表里的所有列,每一列生成了一个对象放在Students里,这样就可以进行查询,拿到查询的对象或者列表。...No.3 实体框架的状态 状态在EF框架中比较重要,如果不了解状态也就无法进行后面的操作,下面我来简单说一下几种状态,在框架中使用EntityState这个枚举 状态 说明 具备该状态的对象 Detached...对象存在,但没有被跟踪 新创建的对象 Unchanged 对象尚未经过修改 从DbContext中读取的对象,使用Attach()方法添加的对象 ,执行SaveChanges()后的对象 Added...对象为新对象,并且已添加到对象上下文 使用Add()方法添加的对象 Deleted 对象已从上下文中删除 使用Remove方法溢出的对象 Modified 对象上的一个属性已更改 受DbContext管理...,到添加到上下文,到保存的过程,大家先不用关注代码的意思,主要看下状态的变化。

    15600

    基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    领域对象是DDD的核心,我们会依次分析聚合/聚合根、仓储、规约、领域服务的最佳实践和规则。内容较多,会拆分成多个章节单独展开。...本文重点讨论领域对象——聚合和聚合根的最佳实践和原则 首先我们需要一个业务场景,例子中会用到 GitHub 的一些概念,如:Issue(建议)、Repository(代码仓库)、Label(标签)和User...聚合 正如前面所讲,一个聚合是一系列对象(实体和值对象)的集合,通过聚合根将所有关联对象绑定在一起。本节将介绍与聚合相关的最佳实践和原则。...如果这样做,在源集合的数据库集合中会保存目标集合对象的副本,因为它在保存时被序列化为JSON,这样可能会导致持久化数据的不一致。...如果你仔细想想,当使用非关系型数据库(如MongoDB)时,当Role和User都有关系列表时还有一个问题:在这种情况下,相同的信息会在不同的集合中重复出现,将很难保持数据的一致性,每当你在User.Roles

    3.1K30

    基于.NET 6.0 自研轻量级ORM框架

    Fast Framework 2、Fast Framework 是一个基于.NET 6.0 封装的轻量级 ORM 框架 支持数据库 SqlServer Oracle MySql PostgreSql...3、框架 优点:体积小 流畅API 使用更加简单 性能高 缺点:不具备有自动建库建表迁移等复杂的功能 由于不同数据库差异较大 实现较为复杂 所以暂时不考虑实现 二、项目明细 (后缀为Test均为测试项目..."ConnectionStrings": "data source=mysqlite.db;pooling=true;" } } 5、Controller 构造方法注入已注册的DbContext..."1001", ProductName = "测试产品1" }).ExecuteReturnIdentityAsync(); Console.WriteLine(result); } //实体对象列表插入...ProductName = "测试产品1" }).Where(w => w.ProductId == 1).ExecuteAsync(); Console.WriteLine(result); } //实体对象列表更新

    96430

    《Entity Framework 6 Recipes》翻译系列 (1) —–第一章 开始使用实体框架之历史和框架简述「建议收藏」

    不幸的是,它在面向对象继承和高度标准化的关系型数据库中产生了一个失配(阻抗失配,微软的安德斯.海尔斯伯格可能会这样叫它)。   ...他们都希望在进化式的开发和结构化数据中架起一座桥。有趣的是,一个新的解决方案-对象关系映射(ORM)产生了。   实体框架,以及集成查询语言(LINQ)框架,他们均出自微软,使我们能处理抗阻失配问题。...对于分层集(level set),我们简短地查看一下实体框架系统的关键组件。但绝不意味着是一个综合的描述,它将用几百页的篇幅。我们通过查看一些关键点帮助你了解本书的核心。...一开始,上下文对象为ObjectContext对象,现在,实体框架支持另一个最新的名为DbContext的上下文对象。DbContext大大简单化了使用实体框架的体验。...无疑,DbContext已经是使用实体框架的首选。同时本书也将非常详细地介绍它。

    1.4K20

    .NET ORM 的 “SOD蜜”--零基础入门篇

    二、ORM之增,删,改 SOD框架的ORM功能跟通常的ORM框架不同,SOD框架的实体类上并没有数据查询和持久化的方法,所以SOD的实体类是“非常纯粹的”实体类,你可以把它看作是一个数据容器,或者用来当作...3.1,最简单的方法 假设前端直接传递了一个 User 实体类对象,中间设置了用户名和密码,现在有一个登录方法使用该对象,该方法详细内容如下所示: /// ...= null; //查询到用户实体类,表示登录成功 } 这里我们使用了SOD框架的ORM查询语言--OQL,它的结构非常类似于SQL,你可以认为OQL就是对象化的SQL语句。...同样,框架也为你提供了OQL对象扩展方法来直接查询列表数据。...;而对于实体类的增,删,改,分别又提供了DbContext,OQL,泛型EntityQuery 等多种方式。

    1.2K70

    EF 相见恨晚的Attach方法

    一个偶然的机会,让我注意了EF 的Attach方法,于是深入了解让我大吃一惊 在我所参与的项目中所有的更新操作与删除操作都是把原对象加载出来后,再做处理,然后再保存到数据库,这样的操作不缺点在于每一次的操作都要对数据库进行两次操作...状态附加到上下文中 从解释可以看出Attach方法主要目的就是把一个没有被dbContext跟踪的对象附加到dbCotext中使其被dbContext跟踪  1   对象上下文:DBContext 建一个新的上下文实例以创建将连接到的数据库的名称...,默认状态是没有对任何对象跟踪的  2   实体状态:  在EF中对实体状会有4种状态:       2.1  Added:对象为新对象,并且已添加到对象上下文,但尚未调用    2.2  Deleted...在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态   2.4 Modified:对象上的一个标量属性已更改,但尚未调用    2.5 Unchanged: 此对象尚未经过修改自对象附加到上下文中后...Entities()) { Product product = ctx.Product.First(); //更新属性操作 ctx.SaveChange();    } 这种写法会产生两次对数据库的操作

    1.4K40
    领券