什么时候用Model,什么时候用Entity?[转载知乎-备忘]

在建立一个实体类的时候,究竟是用Model还是用Entity?比如MVC中,Model存了数据实体,但是他被称为Model,而在EF中,Entity也是存放数据实体,却被称作Entity,这两者有何区别?那究竟什么时候应该用Model什么时候应该用Entity呢?

赵劼:

一般这种称谓都是根据上下文来的,例如Model是因为有MVC,或MVVM的场景下所以叫做Model,这里的Model就是一种职责。Entity则更接近是一种表达业务概念的实体,例如一个User,一个Order等等,而这样的实体在MVC中起到Model的职责。EF的作用是帮助你存取Entity的,而不关心你把这个Entity用作MVC里的Model还是Observer模式中的Subject对象。

当然以上都是我常用的理解方式,不同的项目内部完全可以有不同的理解方式,只要项目内部统一,不会引起混淆即可。命名一直是件很难的事情,实际中绝大部分项目都是要权衡的,也都是有各种不完美的地方的。例如,.NET类库中各种ObservableCollection,ReadOnlyCollection,按照“规范”都应该叫做ObservableList,ReadOnlyList,而Collection这是个更宽泛的概念。

我们可以花一部分精力去考虑这方面问题,但也不用纠结太多,头大且对项目也没太大帮助。

作者:赵劼
链接:http://www.zhihu.com/question/25256772/answer/30290376
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

---------------分---割-----线-----------------------

知也无涯

Entity是专用于EF的对数据库表的操作,而Model这是为页面提供数据和数据校验的,所以两者可以并存

---------------分---割-----线-----------------------

Angkor Wu

Entity接近原始数据,Model接近业务对象~

---------------分---割-----线-----------------------

蒋晟

MVC是模式,EF是ORM,角色不同。MVC里面的Model是C发给V的。这些Model应该被高度优化,仅仅被对应的View用来显示,额外的数据应该被Model层砍掉以节省磁盘访问、内存占用或者数据库带宽。通常情况下,View的数量都会比你数据库的Entity要多,比如用户要求的各种各样的报表,所以对应的Model也应该比数据访问层的Entity多。

用编写资源管理器界面打个比方。在不同的显示模式下。这里的Model可以是WIN32_FIND_DATA这样的常用文件属性。也可以是常用文件属性加上IShellItemImageFactory返回的缩略图。

假设你的View和你的EF的实体类完全一一对应,可以不编写额外的Model。但是随着需求的增多,很难一直使用EF的实体类来做Model。

作者:蒋晟
链接:http://www.zhihu.com/question/25256772/answer/30301743
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

时间: 2024-10-12 13:59:09

什么时候用Model,什么时候用Entity?[转载知乎-备忘]的相关文章

Entity Framework备忘

总结一对多.多对多的“最佳实践”一对多最佳方法(不配置一端的集合属性):1. 多端 public class Student { public long Id { get; set; } public string Name { get; set; } public long ClassId { get; set; } public virtual Class Class { get; set; } }2. 一端 public class Class { public long Id { get

Entity Framwork系列之Model First

第一步 新建数据库 新建数据库TestDB2 第二步 ADO.NET实体数据模型 新建空的ADO.NET实体数据模型 新增实体(表)和类型(字段) 右键TestModel.edmx界面点击"根据模型生成数据库",执行生成的TestModel.edmx.sql文件中的SQL语句. 第三步 增删改查 using System; using System.Data; using System.Linq; using System.Windows.Forms; namespace EFDEMO

实体entity、JavaBean、Model、POJO、domain的区别

Java Bean.POJO. Entity. VO , 其实都是java 对象,只不过用于不同场合罢了. 按照 Spring MVC 分层结构: JavaBean: 表示层 (Presentation Layer) Entity: 业务层 (Service layer) Dao: 数据访问层 (data access layer). Entity接近原始数据,Model接近业务对象- Entity:是专用于EF的对数据库表的操作, Model:是为页面提供数据和数据校验的,所以两者可以并存 P

开发中model,entity和pojo的区别

一.Bean 对于Bean而言,我的理解是只要是Java的类的就可以称为一个Bean,更用在Spring上,被Spring管理的对象就可以将其称作为Bean. 它不仅仅可以包括对象的属性以及get,set方法,还可以有具体的业务逻辑. 二.Entity 这个最容易理解,其特点是:数据表对应到实体类的映射 三.Model Model是MVC中一个概念,可能不和Entity一一对应,因为展示在View层中数据可能是一个Entity的精简,也可能是多个Entity的组合.一句话概括:Model是一个高

Entity Framework系列之Code First

第一步:安装Entity Framework6.0 使用管理NuGet程序包界面安装EntityFramework 第二步:新建实体类 using System.ComponentModel.DataAnnotations; namespace EFDemo4 { public class User { [Key] public int Id { get; set; } public string Name { get; set; } } } 第三步:新建实体上下文类 using System.

Entity Framework 6 Recipes 2nd Edition(13-4)译 -> 有效地创建一个搜索查询

问题 你想用LINQ写一个搜索查询,能被转换成更有效率的SQL.另外,你想用EF的CodeFirst方式实现. 解决方案 假设你有如下Figure 13-6所示的模型 Figure 13-6. A simple model with a Reservation entity            首先,这个例子用EF的CodeFirst方式实现,在Listing 13-10,我们创建实体类Reservation Listing 13-10. The Reservation Entity Obje

Entity Framework系列之DataBase First

第一步 新建数据库和表 USE [TestDB] GO /****** Object: Table [dbo].[T_User] Script Date: 01/14/2015 20:27:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_User]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pa

Entity Framework 6 Recipes 2nd Edition(13-5)译 -> 使POCO的修改追踪更高

问题 你正在使用POCO,你想提高修改跟踪的性能,同时使内存消耗更少.另外,你想通过EF的CodeFirst方式来实现. 解决方案 假设你有一个关于Account(帐户)和相关的Payments(支付)的模型,如Figure 13-7 Figure 13-7. A model with an Account entity and a related Payment   首先,本例用EF的CodeFirst方式实现,在Listing 13-16,我们创建实体类:Account和Payment.为达

[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例

本文我们来学习一下在Entity Framework中使用Context删除多对多关系的实体是如何来实现的.我们将以一个具体的控制台小实例来了解和学习整个实现Entity Framework 多对多关系的实体删除的操作过程. 你将学习到 怎样创建一个引用Entity Framework的项目: 怎样配置Entity Framework的数据库连接: 怎样去掉Entity Framework Code First 生成的表名的复数: 怎样通过EntityTypeConfiguartion配置实体的