entityframework(EntityFramework 代码生成器)

http://www.itjxue.com  2023-01-25 07:47  来源:未知  点击次数: 

Entity Framework与mvc webfrom的区别

概念

Entify Framework 和mvc是net的两种框架

MVC是一个程序构架结构,m-model,v-view,c-controller

Entity Framework是一个orm框架,实现数据与数据实体的映射和数据维护

2.在Entity Framework的.aspx页面中写 c# code的时候总是要加一个%%(读作asp.net输出表达式)然而在mvc中只需要加一个@后加c#代码就可以了。

entityframework 绑定

设:你的表名为Table1(人员表)、Table2(部门表)。

Gridview1.DataSource = context.Table1.Join(context.Table2,a=a.deptid,a=a.id,(a,b)={性别=a.sex==1?"男":"女",部门名称=b.DeptName}).ToList();

如何用Entity Framework 6 连接Sqlite数据库

注意这里面每个.net framework都有两个版本,一个带有bundle字眼,一个没有。一个安装的DLL里面包含SQLite.Interop.dll,而另一个没有。如果你运行代码的时候报

逗无法加载SQLite.Interop.dll地的错误,则将安装文件中的

SQLite.Interop.dll拷贝到Bin文件中即可。或是在NuGet下载的

packages\System.Data.SQLite.Core.1.0.94.0\build中也有对应的程序。

示例代码

Model.cs

public class Person

{

public Int64 Id { get; set; } //注意要用Int64

public string FirstName { get; set; }

public string LastName { get; set; }

}

public class MyContext : DbContext

{

public DbSetPerson Persons { get; set; }

public MyContext()

: base("SqliteTest")

{

}

}

Program.cs

static void Main(string[] args)

{

MyContext context = new MyContext();

var empList = context.Persons.OrderBy(c = c.FirstName).ToList();

Console.WriteLine(empList.Count);

Person people = new Person()

{

FirstName = "Hello",

LastName = "World"

};

context.Persons.Add(people);

context.SaveChanges();

Console.ReadLine();

}

示例代码很简单,就是用EF对Person表进行新增与查看。

配置config文件

如果你是用NuGet获取Sqlite,会自动在config中配置一些相关的信息。

?xml version="1.0" encoding="utf-8"?

configuration

configSections

!-- For more information on Entity Framework configuration, visit --

section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /

/configSections

connectionStrings

add name="SqliteTest" connectionString="data source=SqliteTest.db" providerName="System.Data.SQLite.EF6" /

/connectionStrings

startup

supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /

/startup

system.data

DbProviderFactories

add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /

remove invariant="System.Data.SQLite" /

remove invariant="System.Data.SQLite.EF6" /

add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /

/DbProviderFactories

/system.data

entityFramework

defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"

parameters

parameter value="v11.0" /

/parameters

/defaultConnectionFactory

providers

provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /

provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /

/providers

/entityFramework

/configuration

其中数据连接串是:

add name="SqliteTest" connectionString="data source=SqliteTest.db" providerName="System.Data.SQLite.EF6" /

注意提供程序集是System.Data.SQLite.EF6。

但是这个配仍然是错误的。

如果此时运行程序,会报错:

Unable to determine the provider name for

provider factory of type 'System.Data.SQLite.SQLiteFactory'. Make sure

that the ADO.NET provider is installed or registered in the application

config.

或中文错误信息:

未找到具有固定名称逗System.Data.SQLite地的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的逗entityFramework地节中注册了该提供程序。

意思是EF没有找到提供System.Data.SQLite.SQLiteFactory的dll,我们看看现在config中的entityFramework节点:

entityFramework

defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"

parameters

parameter value="v11.0" /

/parameters

/defaultConnectionFactory

providers

provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /

provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /

/providers

/entityFramework

有System.Data.SQLite.EF6与

System.Data.SqlClient,确实没有名称为System.Data.SQLite的提供程序。这里我一直不明白为什么sqlite会去

找名称为System.Data.SQLite的提供程序,因为我们在连接串中配置的provider也是

System.Data.SQLite.EF6。

那我们就在EF的配置节点中增加一个名为System.Data.SQLite的provider,但type仍然是System.Data.SQLite.EF6。最终的配置如图:

红色部分是配置有变化的地方。

这里再运行程序就可以了。

注意:

1.连接串的配置。

数据连接串可以指定绝对地址,也可以指定相对地址。像我的data

source=SqliteTest.db,则SqliteTest.db要在Bin文件夹中,如果是web程序可以通过Data

Source=|DataDirectory|\SqliteTest.db来配置在App_Data文件平中。

2.如果没有指定数据库中的表文件名,EF生成的SQL表都是用复数表示。就像我的程序中实体名是Person,但EF去查找的表名会是People。所以在数据库中定义的表名是People。

3.不支持CodeFirst模式,您需要自己先设计好Sqlite的表结构。

什么是Entity Framework

Entity Framework(实体框架)

entity

英?['ent?t?]???美?['?nt?ti]

n. 实体;存在;本质

microsoft entity framework 包含哪些功能

Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。

目前 ADO.NET Entity Framework 的开发,在 Visual Studio 2008 中有充份的支持,在安装 Visual Studio 2008 Service Pack 1 后,文件范本中即会出现 ADO.NET 实体数据模型 (ADO.NET Entity Data Model) 可让开发人员利用 Entity Model Designer 来设计 EDM,EDM 亦可由记事本或文本编辑器所编辑。

主条目:ADO.NET Data Services

ADO.NET Entity Model Designer

ADO.NET Entity Model Designer

微软特别针对了网络上各种不同的应用程序 (例如 AJAX, Silverlight, Mashup 应用程序) 开发了一个基于 ADO.NET Entity Framework 之上的服务,称为 ADO.NET Data Services (项目代号为 Astoria),并与 ADO.NET Entity Framework 一起包装在 .NET Framework 3.5 Service Pack 1 中发表。

目前已有数个数据库厂商或元件开发商宣布要支持 ADO.NET Entity Framework:

(1) Core Lab,支持Oracle、MySQL、PostgreSQL 与 SQLite 数据库。

(2) IBM,实现 DB2 使用的 LINQ Provider。

(3) MySQL,发展 MySQL Server 所用的 Provider。

(4) Npqsql,发展 PostgreSQL 所用的 Provider。

(5) OpenLink Software,发展支持多种数据库所用的 Provider。

(6) Phoenix Software International,发展支持 SQLite 数据库的 Provider。

(7) Sybase,将支持 Anywhere 数据库。

(8) VistaDB Software,将支持 VistaDB 数据库。

(9) DataDirect Technologies,发展支持多种数据库所用的 Provider。

(10) Firebird,支持 Firebird 数据库。

Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以 及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。

(1) 概念层:负责向上的对象与属性显露与访问。

(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。

(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。

--------------------------

Entity Framework7 部分新功能

1、在Linq to Entity 查询中对列使用类型转换

2、Code-First下用数据迁移更新数据库时使用修改(Alter)代替删除(Dropping)后重新创建

3、删除孤儿(orphans)记录

4、日志记录

Entity Framework7 有哪些改变?

1、新特性

a、支持对关系型数据的批量更新。在这之前,就是说他的更新效率太低,如果要实现批量更新,特别插入时,需要借助sql语句或是第三方工具类。相信这是很多人期待的功能;

b、支持唯一约束。它允许你在实体内除主键外额外标识一个键,将他们用作外键。

2、行为(Behavior)改变

在EF6和前期的版本中,顶层API就有很多不直观的行为,虽然EF7尽可能是保持顶层API的相同,但仍去掉了一些限制并添加了一些我们期待的行为。什么意思呢?这听起来有点迷糊,举个例子来说明吧,以前的查询,虽然Linq给我们带来了很大方便,但限制多呀,整个Linq查询翻译成一条单独的sql查询,Linq查询中只能包含EF能翻译成sql的语句或方法;还有就是sql的生成,有时生成了很复杂、效率不高,且不是我们希望的sql语句。EF7改变这种情况,可以返回多结果集,sql评估工作也不是在数据库端来做了,变更到客户端。这样就为生成sql提供了很大的灵活性。如果还有点晕,没关系,先有个印象就行。

3、变得更加简单、灵活

直接使用一个例子来说明吧。我们想通过EF的元数据来获取Blog实体被映射到数据库中的哪一张表。在这之前,我们的代码会是这样:

4、去掉了一些特性

a、每类型映射多个实体集(MEST)。这个特性,估计用的人很少,正是因为使用的人少,所以才去掉。它是什么意思呢?就是一个类型对应数据库中的多张表,例如:表Product 和 RetriedProduct都映射到Product类。如果你还有这样的需求,使用继承是更好的选择。

b、非常复杂的类型映射。在EF6.x中,可能在一个继承映射中组合TPH,TPT和TPC。EF7不再支持这种复杂的映射了,它要求你的CLR 类型尽量跟表结构保持一至。至于为什么,不少人到现在都还没有弄明白什么是TPH,TPT,TPC,那更说不上灵活运行了,这也是导致EF6.x MetadataWorkspace异常复杂的主原之一。

c、去掉edmx建模。这可能会让很多人失望,因为它曾经给我们带来多么美好的回忆。但它有很多的不足,比较一些复杂的需求,不适应ddd分层设计,不符合现在流行的POCO等。最主要的是,有更好的选择code-based建模,这就是我们常说的code-first。 可能你会有疑问,怎么code-first和edmx是平级概念,它不是跟db-first、model-first平级的吗? 没错,它是跟edmx平级的,d、ObjectContext API。它陪着EF一起成长,到EF4.1时才被DbContext弄到幕后.不过DbContext只是它的外观模式,底层仍然是使用的它。有时需要使用一些高级的功能时,我们还得想办法把它找出来。去掉它并不意味着它以前的一些功能不能用了。EF7重写了底层,把之前一定需要ObjectContext才能使用的api包含在了DbContext中,并且让调用更加清晰,简单。

e、延迟加载。 这功能相信大家不陌生,它一直被当成EF的一大特点,但现在,它将要从EF7中去掉。不确定最终的版本微软会不会把它请回来,因为这一点存在很大的争论。无论是开发人员,还是EF的开发团队。一,不是所有的应用都需要延迟加载;二、不少的EF使用者对它没有深入的去了解,经常会有人问,为什么会出现"无法完成该操作,因为 DbContext 已释放"这样的问题。这说明这个功能反而给一部份使用者带来了困惑。

这些变化并不是最终的,也许文中说的,会发生改变。当然这里也不可能列出所有的变化点,毕竟EF7还在处于开发过程中。总之,它是一个革命性的版本,以至于有人在争论应该叫他EF7呢,还是EF1。

5、对非关系型数据库的支持,

6、官方支持SQLite;

以上均为网络收集而来,希望有用.如果没有很大用处,还请多多见谅

(责任编辑:IT教学网)

更多

相关Illustrator教程文章

推荐Illustrator教程文章