Entity Freamwork CodeFirst 串連PostgreSql資料庫

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   ar   color   os   sp   

EF的Code First是一個比較強大也比較有用的功能,他可以讓你先寫代碼,最後根據代碼去產生資料庫,非常符合OO設計的要求,拋開資料庫層面不管(當然不是完全的不管),只管對象的設計。

首先,說一下我做測試的環境:EF 6.0/PostgreSql 9.2

前提:電腦上裝好了PostgreSql資料庫以及配置好ODBC資料來源,以確保電腦對PostgreSql的支援。

第一步:添加程式對EF的引用,有個偷懶的辦法是,添加一個空的Code Fist ADO.NET實體資料模型,這樣,VS會自動幫你添加對EF以及相關的DLL的引用

第二步:用Nuget添加對Npgsql For Entity Freamwork的引用,這樣子的話,Nuget會自動幫你添加NpgSql和NpgSql.EntityFreamWork的引用,並且會對你的Config檔案中添加配置。

第三步:配置Config檔案

 1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3   <configSections> 4     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 5   </configSections> 6   <startup> 7     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 8   </startup> 9   <entityFramework>10     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">11       <parameters>12         <parameter value="v11.0" />13       </parameters>14     </defaultConnectionFactory>15     <providers>16       <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />17     </providers>18   </entityFramework>19   <system.data>20     <DbProviderFactories>21       <remove invariant="Npgsql"/>22       <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.3.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />23     </DbProviderFactories>24   </system.data>25   <connectionStrings>26     <add name="ConnectionStr" connectionString="server=127.0.0.1;port=5432;Database=test;uid=*****;pwd=*****" providerName="Npgsql" />27   </connectionStrings>28 </configuration>
Config

在這個過程中,我對幾個地方有了比較清楚的認識:

1.<add name="ConnectionStr" connectionString="server=127.0.0.1;port=5432;Database=test;uid=postgres;pwd=baixu963." providerName="Npgsql" /> 在這句裡面,ProviderName要填寫的就是訪問資料庫的ADO.NET命名空間,比如Sqlserver就是System.Data.SqlClient,MySql就應該是:MySql.Data.MySqlClient,.net訪問PostgreSql是由開源項目Npgsql提供的驅動程式,命名空間也是NpgSql,所以,這裡的providerName="Npgsql"。

2.在WebConfig中,configSections節點一定要在第一個,不要亂改動他的位置。

3.DbProviderFactories節點:中文含義:資料庫供應商工廠,這也是為.net訪問資料庫提供的一個配置,因為這是微軟搞出來的,他對SqlServer的支援,都已經給過預設值了,所以我們平時配置Sqlserver的時候不需要管,但是配置別的一些資料庫,那就需要修改了。其中,最重要的就是invariant這個東西了,這個對應的也是資料庫的ADO.NET驅動的命名空間。還有Type也需要注意,下面再給出MySql的寫法:

1 <DbProviderFactories>2             <add name="MySQL Data Provider"3                  invariant="MySql.Data.MySqlClient"4                  description=".Net Framework Data Provider for MySQL"5                  type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>6         </DbProviderFactories>
MySql DbProviderFactories

設定檔就到這裡吧,下面開始代碼的部分。

首先,給出一個Person類:

1  public class Person2     {3         [Key]4         public int Id { get; set; }5         [StringLength(32)]6         public string Name { get; set; }7     }
Person

Id上面的特性標籤Key代表這是一個主鍵,Name上面的StringLength是告訴資料庫,這個欄位是32個長度。

然後,建立一個DbContext(如果你剛才是通過建立空的Code Fist ADO.NET實體資料模型引用的EF,他會自動幫你建一個Demo出來,你可以直接改那個),不多解釋了,直接上代碼,

public class EfDbContext : DbContext
{
public EfDbContext()
: base("name=ConnectionStr")
{

}
public virtual DbSet<Person> Person { get; set; }
}

其中Name對應的值是資料庫中的連接字串所對應的Name,然後下面的DbSet<T>就對應著資料庫中的一個表,注意這個DbSet一定要是Virtual,EF需要去重寫它。

基本的咱們已經寫完了,咱們來試試,我這是控制台程式,所以直接是控制台的代碼啦,你們隨意。

 1 class Program 2     { 3         static void Main(string[] args) 4         { 5             EfDbContext context=new EfDbContext(); 6             Person person=new Person(); 7             person.Name = "baiyunchen"; 8             context.Person.Add(person); 9             context.SaveChanges();10             var p = context.Person.FirstOrDefault(x => x.Name == "baiyunchen") ?? new Person();11             Console.WriteLine(p.Name);12             Console.ReadKey();13         }14     }
Test Code

等待他輸出了P的名字之後,再去看資料庫,他已經幫忙自動建庫,建表,插入資料,一切OK了。

比較奇怪的是,他建立了個People表,後面我強制給Person類加了[Table="Person"]這樣才給我建了Person表,不知道是不是跟哪個關鍵字衝突了。

另外,我發現,EF在你實體變動了之後,你如果需要處理,會變得異常的麻煩。先寫到這裡,我得繼續研究研究EF了。

 

Entity Freamwork CodeFirst 串連PostgreSql資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.