[转载]使用ADO.NET EntityFramework实体模型类

原文地址:http://www.cnblogs.com/snowdream/archive/2009/08/04/analyse-why-entity-classes-less-than-data-tables.html

在通过数据库生成ADO.NET Entity Data Model(实体数据模型)时可能会出现生成的实体类个数少于数据表个数的情况。以下介绍两种可能会碰到这种情况的原因。
1. 数据表的所有列都可为空。
当数据表有主键时,实体数据模型中会把主键作为实体键来标识一个实体,如果数据表不含主键,则所有不可空的列都是实体键,它们共同来标识一个实体。当数据表的所有列都可空的时候,无法标识一个实体,所以实体数据模型中就不包含这个实体类了的。只需要给该表加一个主键或不可空的列就会出现在实体数据模型中。另外,在使用ADO.NET Entity Framework时不含主键的表比较容易出现一些奇怪的错误,尽量为每个表设置一个主键。

2. 数据表的所有列都是外键
当数据表中所有的列都是外键时,实体数据模型会智能地将这些关系中的主键表直接通过导航属性相连。
下面举一个例子。Account表和AccountPermission表存在外键关系,Account表的ID是主键,AccountPermission表的AccountID是外键。Permission表和AccountPermission表存在外键关系,Permission表的PermissionID是主键,AccountPermission表的PermissionID是外键。数据库关系图如下

这是AccountPermission表不会出现在实体数据模型中,Account表和Permission表直接通过导航属性。

这样是正常的,在使用上也不会有不便,只是初学者可能会觉得丢失了一个数据表。实际上只要将PermissionID看成是Account的一个属性,就可以理解这样的变换了。此时如果要修改AccountPermission表中PermissionID的值,不可以简单地Account.Permission.Permission=(修改后的值),而是应该先select出一个PermissionID=(修改后的值)的Permission实体,然后将这个实体作为Account的Permission实体。

时间: 2024-10-29 04:24:46

[转载]使用ADO.NET EntityFramework实体模型类的相关文章

【转载】ADO.NET与ORM的比较(4):EntityFramework实现CRUD

[转载]ADO.NET与ORM的比较(4):EntityFramework实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据.在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如

【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD

[转载]ADO.NET与ORM的比较(3):Linq to SQL实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据.在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第

【转载】ADO.NET与ORM的比较(2):NHibernate实现CRUD

[转载]ADO.NET与ORM的比较(2):NHibernate实现CRUD  转自周公 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据.在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,

ADO.NET之DataSet类

DataSet相当于一个小型数据库,通过它可以管理数据和关系 1.将sql代码的返回结果填充到该类中,然后从该类中读取,显示.(类似于Sqldatareader类) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; nam

基于ADO.NET的SqlHelper类

1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: server=服务器名:database=数据库名:uid=用户名:pwd=密码:例如:要连接本机上的StudentManagement数据库,用户名为sa,密码为111 string connString="server=.;database=StudentManagement:uid=sa:pw

JAVA的StringBuffer类(转载整理)____非常重要的一个类,线程安全,不用每次创建一个对象,以及和String的区别

核心部分转载自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在S

C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键关系 2.创建新的C#项目,创建 数据库连接类 与 数据库操作方法 a.引用数据库 using System.Data.SqlClient;    b.创建数据库连接类:先进行编写连接字符串,在实例化连接类 c.创建数据库操作方法(此处不是实例化类)    d.打开数据库 → 执行操作 → 关闭数据

ADO.NET 【实体类】【数据访问类】

认识分层结构,分层式结构是最常见,也是最重要的一种结构. 三层架构(3-tier architecture) 界面层(User Interface layer) 主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问. 业务逻辑层(Business Logic Layer)主要是针对具体的问题的操作,也可以理解成对数据层的操作 数据访问层(Data access layer)主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层 数据访问层包括   实体类 数据访问类 优点

(转载)OC学习篇之---类的延展

前一篇文章我们介绍了类的类目概念和使用,那么这篇文章我们继续来介绍一下OC中的一个特性:延展. 其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性. OC中为了弥补C语言中的这个问题,就有了延展的概念,下面来看一下代码: Person.h 1 // 2 // Person.h 3 // 10_CategoryExtend 4 // 5 // Created by jiangwei on 14-10-11.