DBcontext應用於已存在數據庫


EF4.1有三種方式來進行數據操作及持久化。分別是Database-First,Model-First,Code-first,下面簡單小結一下:
1.Database First是基於已存在的數據庫,利用某些工具(如Vs提供的EF設計器)創建實體類,數據庫對象與實體類的匹配關系等,你也可以手動修改這些自動生成的代碼及匹配文件。
2.Model First 這種方式是先利用某些工具(如VS的EF設計器)設計出實體數據模型及他們之間的關系,然后再根據這些實體、關系去生成數據庫對象及相關代碼文件。
3.Code First 這種方式需要先寫一些代碼,如實體對象,數據關系等,然后根據已有的代碼描述,自動創建數據對象,這種方式在前一篇文章已經簡單說過了。但其實這種方法與Model First是非常類似的。我們自己寫的代碼,其實就是用代碼表示實體模型,而Model First是用可視化的方式描述了實體模型。

code First方法默認情況下是以命名空間.DBcontext類名來作為自動創建的數據庫名稱,如上一篇中的CodeFirstSample.BlogDbContext.

我們也可以按如下方法指定數據庫名稱:

復制代碼
public class BlogDbContext : DbContext
{
/// <summary>
/// 新建數據庫,並命名為BlogDB,
/// </summary>
public BlogDbContext() : base ( " BlogDB " ) { }

public IDbSet < BlogUser > BlogUsers { get ; set ; }
public IDbSet < Post > Posts { get ; set ; }


}
復制代碼

code First這種方式也可以用於已存在的數據庫,具體作法如下:

第一步:在app.config或者web.config中配置數據庫連接字符串

復制代碼
< configuration >
< connectionStrings >
< add name ="BlogDB" providerName ="System.Data.SqlClient"
connectionString
="Data Source=.\sqlexpress;Initial Catalog=MyBlogDB;Integrated Security=True" />
</ connectionStrings >
</ configuration >
復制代碼

第二步:是讓DBcontext獲取已存在數據庫,在構造DBcontext時,指定使用這個連接字符串

復制代碼
public class BlogDbContext : DbContext
{

/// <summary>
/// 會在app.config或者web.config文件中查找BlogDB節,做為連接字符串
/// 但數據庫中必須已存在表,即不會重新創建表,這種方法類似DataBase First
/// </summary>
public BlogDbContext()
:
base ( " name=BlogDB " )
{ }
public IDbSet < BlogUser > BlogUsers { get ; set ; }
public IDbSet < Post > Posts { get ; set ; }


}
復制代碼

第三步:添加要匹配的類以及匹配關系。

復制代碼
public partial class BlogUser
{

public int BlogUserId { get ; set ; }
public string BlogName { get ; set ; }
public virtual ICollection < Post > Posts { get ; set ; }
}

public partial class Post
{

public int PostId { get ; set ; }
public string PostTitle { get ; set ; }
public int BlogUserId { get ; set ; }
public virtual BlogUser BlogUser { get ; set ; }
}
復制代碼

第四步:獲取數據

復制代碼
using (BlogDbContext db = new BlogDbContext())
{

// 通過主鍵查找用戶
BlogUser blogUser = db.BlogUsers.Find( 4 );
Console.WriteLine(blogUser.BlogName);
foreach (var item in blogUser.Posts)
{
Console.WriteLine(
" \t{0} " ,item.PostTitle);
}
}
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM