2013-04-11 119 views
6

我期待在我現有的項目中實現實體框架版本4.3.1,它不會跟隨此EF。數據庫已經開發,目前正在使用的應用ado.net。在這種情況下,如何我從EF開始工作,是數據庫優先,代碼優先。實體框架與現有數據庫

回答

13

即使在數據庫已經存在我仍然使用代碼優先的方法,使用註釋映射表,因爲域比EDMX文件更有組織。如果有許多表格,那麼可視化的EDMX就會變得毫無用處,因爲設計將會遍佈各處的數據和連接。

兩個步驟,你可以用這種方法開始:

1)創建一個域模型類,Customer例如,使用數據說明其映射到表:

[Table("tbl_cust")] 
public class Customer 
{ 
    [Key] 
    [Column("cust_id")] 
    public int CustomerId { get; set; } 
    [Column("cust_name")] 
    public string Name { get; set; } 
    // Add other properties below 
} 

2)創建上下文類從DbContext派生並設置DbSet<T>屬性每個模型,我們只有一個在我們的例子這樣:

public class MyApplicationContext: DbContext 
{ 
    public MyApplicationContext() : base("name=ConnectionStringName") { } 

    public DbSet<Customer> Customers { get; set; } 
} 

現在在你的代碼可以實例化派生類DbContext和使用LINQ進行查詢的任何地方:

var _db = new MyApplicationContext(); 
var customer = _db.Customers.Where(c => c.CustomerId == 37).FirstOrDefault(); 

不要忘記添加一個引用的EntityFramework裝配使用的NuGet。

祝你好運。

+0

感謝所有的真棒解決方案。我想我需要先與數據庫首先,即使我有興趣使用代碼第一次通過反向工程師代碼first.I嘗試代碼第一,但沒有運氣它不創建EF類和失敗,也許我的數據庫設計得不是很好。失敗的其他原因? – 2013-04-11 16:07:59

+0

你是什麼意思「它沒有創建EF類」? – 2013-04-11 16:57:57

+0

by EF Classes我的意思是說表的Domain類,模型文件夾。我沒有看到任何填充後,我做了反向工程師的代碼first.I以下鏈接http://msdn.microsoft.com/en -us/data/jj200620.aspx – 2013-04-11 17:11:45

1

由於您的數據庫已經存在,顯而易見的選擇是數據庫第一。如果數據庫的設計具有常識,那麼它(大部分)的效果很好。

0

我想問題是如果你想使用EF設計器來可視化你的數據庫或不。既然你在看EF 4.3.1(實際上你應該看EF5不是4.3.1 - EF5是最新版本)我假設你不關心設計師。在這種情況下,您可以使用EF Power Tools對數據庫進行逆向工程。這將創建一組將匹配您的數據庫的類。請注意,由於數據庫已經創建,EF將無法檢測到類中的更改(與Code First創建的數據庫相比,當額外信息存儲在數據庫中且EF能夠確定模型是否已更改時)。請務必閱讀此blog post - 它包含許多細節,您可能會發現有助於做出決定。 如果你關心能夠在設計師中看到你的模型,你可以使用VS來逆向工程DB。如果你使用VS2012,你將默認獲得EF5和DBContext。與使用Code First的區別在於,不是根據您的類建立模型EF需求,而是將模型保存在作爲項目一部分的EDMX文件中(並用於爲您生成代碼)