⑴ 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)。這個特性,估計用的人很少,正是因為使用的人少,所以才去掉。它是什麼意思呢?就是一個類型對應資料庫中的多張表,例如:表Proct 和 RetriedProct都映射到Proct類。如果你還有這樣的需求,使用繼承是更好的選擇。
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;
以上均為網路收集而來,希望有用.如果沒有很大用處,還請多多見諒
⑵ localdb 中文變成亂碼怎麼解決
問題:在vs2013中用sql語句insert into table("測試")可以正常顯示,但在asp用EF6插入中文顯示為亂碼(全是問號)
原因:localdb的磨枝默認不是中文排序要改成中文瞎塵敏兄清排序才能用EF6正常插入中文
解決方法:代碼:
declare @database nvarchar(100)
declare tmpCur cursor for
select DB_NAME()
open tmpCur
fetch next from tmpCur into @database
declare @sql nvarchar(500)
select @sql='alter database ['+@database+'] set single_user with rollback immediate'
exec(@sql)
select @sql= 'alter database ['+@database+'] collate Chinese_PRC_CS_AS'
exec(@sql)
select @sql= 'alter database ['+@database+'] set multi_user'
exec(@sql)
close tmpCur
deallocate tmpCur
⑶ net-EF codefirst 怎麼在創建資料庫時增加初始數據
1. 使用CodeFirst方式創建資料庫
我們新建一個控制台項目,項目中添加兩個Model:Author和Blog以及DbContext。 DbContext的添加方式如下:
項目上右鍵->添加->新建項->ADO.NET Entity Data Model->Empty Code First model
項目代碼如下:
1 //默認生成的數據表名為類名+字母s,這里使用TableAttribute來指定數據表名為T_Authors
2 [Table("T_Authors")]
3 public class Author
4 {
5 public int Id { set; get; }
6 public string Name { set; get; }
7 /*
8 此處定義了Blog類型的屬性,所以要確保Blog類中至少要有一個表示主鍵的欄位,即public int Id { set; get; }。
否則在生成數據表時會報錯:"EntityType 'Blog' has no key defined. Define the key for this EntityType.
9 Blogs: EntityType: EntitySet 'Blogs' is based on type 'Blog' that has no keys defined."
10 */
11 public virtual ICollection<Blog> Blogs { set; get; }
12 }
13
14 [Table("T_Blogs")]
15 public class Blog
16 {
17 public int Id { set; get; }
18 public string Title { set; get; }
19 public DateTime Time { set; get; }
20 public int AuthorId { set; get; }
21 public virtual Author Author { set; get; }
22 }
23
24 public class MyDbContext: DbContext
25 {
26 public MyDbContext()
27 : base("name=MyDbContext")
28 {
29 }
30 //DbContext會根據配置文件中connectionStrings指定的資料庫名稱來建立資料庫
31 //DbContext根據DbSet屬性的類型來創建數據拍畢芹表,這里指定了Author類型的屬性,所以會生成T_Authors數據表
32 public virtual DbSet<Author> Authors { set; get; }
33 }
CodeFirst方式會根據配置文件數兆中的配襲畢置生成資料庫,這里小編使用的是MYSQL資料庫,配置文件如下:
1 <!--EF for MYSQL-->
2 <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
3 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
4 <providers>
5 <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
6 </providers>
7 </entityFramework>
8 <connectionStrings>
9 <add name="MyDbContext" connectionString="server=localhost;port=3306;database=EF;uid=root;password=root" providerName="System.Data.MySqlClient" />
10 </connectionStrings>
PS:小編使用的是EF6和MYSQL資料庫,所以要在項目中添加對Mysql.Data.Entity.EF6以及EntityFrameword 6.0的引用。
到此,我們已經完成生成資料庫的工作,接下來在Main方法中寫兩行代碼:
1 using (var db = new ManagerDb())
2 {
3 db.Authors.Add(new Author() { Name = "xfh" });
4 db.SaveChanges();
5 }
⑷ EF6.1.1的code first開發,出現異常: System.Data.Entity.SqlServer.SqlProviderServices, 懸賞50分
1、估計EF dll包不對,或者是配置問枯中題沒叢山;鄭敬(如果排除了就考慮2)
2、如果是VS的問題,建議重做系統和環境。
⑸ vs2010 使用ef6.0訪問oracle資料庫報錯!
資料庫為Oracle,就不要使用EF了。
問題已經很明顯。「Make sure the provider is registered in the 'entityFramework' section of the application config file」,就是讓你看看在App.config文件中的<provider>。
【源文件中的內容如下】:
<entityFramework>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</entityFramework>
按理說,只要將<provider />寫成:
<provider invariantName="Oracle.ManagedDataAccess.Client" type="System.Data.OracleProviderServices, EntityFramework.OracleServer" />
之類即可,但是可悲啊!
目前支持EF6的provider有:
(1)Microsoft SQL Server provider
(2)Microsoft SQL Server Compact Edition provider
(3)Devart dotConnect Data Providers 【注意】
(4)Firebird provider
(5)Visual Fox Pro porvider
(6)MySQL
(7)PostgreSQL
1、2、4、5、7均可以從NuGget中獲取。3、7需要到相應的網站獲取。
注意第三個:這個插件就是用於Oracle資料庫的,其為第三方插件,由Devart公司開發。但有兩大致命缺點:1、收費(是30天免費試用,過了30天要麼卸載,要麼付款)。2、目前支持的Oracle的最高版本為:Oracle8.2i。
哎!數下流劍客,還是Oracle!!!
⑹ 關於使用EF6.0框架報錯The underlying provider failed on Open.
這有很多閉鋒種可能
1.確定連接字元串正確的話,賀態喚再檢查下WebConfig中EF版本與項目實際引用的是不是一致
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
2.試一試你寫的sa和password能不禪凱能成功登錄到資料庫
⑺ ASPNET MVC5+EF6連接Oracle資料庫有哪些方式
一OracleClient方式,是微軟專門針對Oracle資料庫開發的
引啟亮用類庫:System.Data.OracleClient.dll命名空間:System.Data.OracleClient
常用類:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等
連接字元串:隱培「data source=**;user id=**;password=**」(注意:可以不指定 provider 驅動)
二OleDb方式
引用類庫:System.Data.dll命名空間:System.Data.OleDb
常用類:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
連接字元串:與OracleClient方式相比,要添悄攜寬加一個provider,「provider=MSDAORA.1;」
下面是示例,分別用這兩種方式實現了相同的功能:連接資料庫,並將查詢到的數據放到dataSet中。
⑻ 如何用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 DbSet<Person> 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 http://go.microsoft.com/fwlink/?LinkID=237468 -->
<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的表結構。
⑼ 小張在設計資料庫用戶名和密碼時怎麼填
oracle創建的表指定用戶名和密碼宴襲,PLSQL操作Oracle創建用戶和表(含創建用戶名和密碼)... 轉載
2021-04-11 00:03:17
麥小秋
碼齡3年
關注
.png
1、打開PLSQL,填寫用戶名和密碼(初始有兩個用戶sys和system,密碼是自己安裝oracle資料庫時定的),Database選擇ORCL(默認資料庫,oracle中創建的用戶就像是mysql中建物祥碰的資料庫,兩者有異曲同工之妙)
.png
2、登陸成功後在界面的頭部可以看到一下信息,最上面的system@ORCL就表示是用戶system在登錄狀態,其中菜單欄的session可以登錄、退出
.png
3.然後在下面的列表中找到USER,然後右鍵——》NEW,創建新的用戶,如下兩張圖中的內容都要設置,然後點擊apply就可以了。(註:第二章圖中的三個許可權必須設置,否則會出現不能登錄或者不能操作表的錯誤)
關於3個基本去許可權介紹:
connect : 基本操作表的許可權,比如增刪改查、視圖創建等
resource: 創建一些函數,比如簇、索引,創建表、列等
dba : 相當於管理員許可權,擁有系統所有許可權
.png
.png
4、登錄新建的用戶,點擊前面提到的session——》log on,填寫用戶名和密碼第三個還選orcl,第四個選默認normal,點擊登錄
.png
5、在最上面可以看到登錄狀態
.png
6、創建資料庫,右鍵點擊左下角列表中的Tables—》 NEW,創建新的數據表,填寫name,comments是對表的備注,然後在第二張圖中填寫需要的欄位及其類型等,最後點擊apply應用,如罩談圖
.png
.png
7、查看創建的表,點擊左下角列表中的Tables,右鍵選自己新建的表,點擊Ed
⑽ MVC5加EF6 執行存儲過程 獲取表
zty_ABMXSFX 應該是你資料庫裡面塵裂對應的存儲過程
EF會把存儲過程映射為上下文中的一個方法, 起返回值為芹兄尺存嫌高儲過程中SELECT出來的值或結果集合