新聞中心
在.NET開發(fā)中,訪問數(shù)據(jù)庫是必不可少的一部分。使用ADO.NET可以高效地訪問數(shù)據(jù)庫,但是為了減少代碼冗余并提高工作效率,使用Entity Framework是更好的選擇。Entity Framework通過LINQ來訪問數(shù)據(jù)庫,使代碼更加簡潔易懂。在使用Entity Framework之前,需要創(chuàng)建一個數(shù)據(jù)庫上下文類,以便作為訪問數(shù)據(jù)庫的入口。本文將介紹如何快速創(chuàng)建數(shù)據(jù)庫上下文類,以便訪問數(shù)據(jù)庫。

臺兒ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
1. 創(chuàng)建項目
打開Visual Studio,創(chuàng)建一個新項目。選擇Visual C#,然后選擇“控制臺應(yīng)用程序”模板。為項目命名,選擇保存位置,并單擊“創(chuàng)建”按鈕。在新創(chuàng)建的項目中,右鍵單擊項目名稱,然后選擇“管理NuGet程序包”選項。
2. 安裝Entity Framework
在NuGet包管理器中,搜索“EntityFramework”,然后選擇“安裝”按鈕以安裝Entity Framework。安裝完成后,Entity Framework將出現(xiàn)在項目引用中。
3. 創(chuàng)建數(shù)據(jù)庫上下文類
接下來,需要創(chuàng)建一個數(shù)據(jù)庫上下文類,以便使用Entity Framework訪問數(shù)據(jù)庫。在Visual Studio中,右鍵單擊項目名稱,然后選擇“添加” -> “新建項” -> “類”。為類命名,并將其保存在項目的根目錄中。
using System.Data.Entity;
namespace ConsoleApp1
{
public class MyDbContext : DbContext
{
public DbSet YourDatabaseObjects { get; set; }
}
}
上述代碼中,MyDbContext類是從DbContext類繼承而來的。DbSet是Entity Framework的對象,用于訪問數(shù)據(jù)庫中的對象(表)。
4. 連接數(shù)據(jù)庫
在上一步創(chuàng)建的MyDbContext類中,需要設(shè)置數(shù)據(jù)庫連接字符串。在App.config或Web.config文件中,找到標記,并添加一個標記。在標記中,設(shè)置數(shù)據(jù)庫連接字符串。例如:
上述代碼中,Data Source表示服務(wù)器名稱,Initial Catalog表示數(shù)據(jù)庫名稱,Integrated Security為True表示使用Windows身份驗證方式登錄。
5. 測試訪問數(shù)據(jù)庫
現(xiàn)在,可以使用MyDbContext類訪問數(shù)據(jù)庫。在Mn方法中,創(chuàng)建MyDbContext對象,并使用DbSet訪問數(shù)據(jù)庫中的對象。例如:
using System;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Mn(string[] args)
{
using (var db = new MyDbContext())
{
var yourDatabaseObjects = db.YourDatabaseObjects.ToList();
foreach (var yourDatabaseObject in yourDatabaseObjects)
{
Console.WriteLine(yourDatabaseObject);
}
}
}
}
}
運行項目,可以看到數(shù)據(jù)庫中的對象被輸出到控制臺上?,F(xiàn)在,已經(jīng)成功創(chuàng)建了一個能夠訪問數(shù)據(jù)庫的項目。
如果需要訪問多個數(shù)據(jù)庫,可以在MyDbContext類中添加多個DbSet。如果需要更加復(fù)雜的查詢,可以使用LINQ語句來查詢數(shù)據(jù)庫中的對象。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!
怎么創(chuàng)建數(shù)據(jù)庫
問題一:創(chuàng)建數(shù)據(jù)庫的兩種方法 交互式創(chuàng)建,就是你右擊數(shù)據(jù)庫然后選擇新建數(shù)據(jù)庫按鈕就可以…..還有一種就是sql語句創(chuàng)建比如創(chuàng)建一個數(shù)據(jù)庫名為a 的數(shù)據(jù)庫,那么sql語句就是,create database a;然后執(zhí)行下就可以…
問題二:如何用MySQL建立數(shù)據(jù)庫 這很簡單??!
在Windows下,假如你的MySQL裝在 D:\MySQL
就可以這樣:
先切換到它的bin目錄
cd D:\MySQL\bin\
撫:\MySQL\bin>mysql -u root -p
接著輸入你的root密碼
接下來你就可以創(chuàng)建數(shù)據(jù)庫、創(chuàng)建用戶、創(chuàng)建修改表之類的操作(常用命令如下)。
查看現(xiàn)有數(shù)據(jù)庫
mysql> show databases;
創(chuàng)建數(shù)據(jù)庫(假如數(shù)據(jù)庫名為 mydb)
mysql> create database mydb;
刪除數(shù)據(jù)庫(假如數(shù)據(jù)庫名為 mydb)
mysql> drop database accounts;
使用數(shù)據(jù)庫(假如使用數(shù)據(jù)庫 mydb)
mysql> use mydb;
執(zhí)行完使用數(shù)據(jù)庫命令后,就可以對該數(shù)據(jù)庫進行創(chuàng)建、修改、插入、刪除表等操作,這些表的操作命令你可以到網(wǎng)上局旦找找,不是很難的。一個數(shù)據(jù)庫就相當于一個 Excel 文件,而表則相當于Excel文件的單元格,數(shù)據(jù)就是存放在表中。
問題三:怎樣建立一個簡單數(shù)據(jù)庫? 把excel導(dǎo)入數(shù)據(jù)庫,不出現(xiàn)表格嵌套可以使用下面這個方法導(dǎo)入;
思路:
(1)、把excel數(shù)據(jù)讀入到dataset中;
(2)、建立相應(yīng)結(jié)構(gòu)的數(shù)據(jù)表格
(3)、把dat暢set中的數(shù)據(jù)更新到數(shù)據(jù)表中
問題四:如何用數(shù)據(jù)庫向?qū)?chuàng)建數(shù)據(jù)庫 Microsoft Access 提供了三種方法來創(chuàng)建 Access 數(shù)據(jù)庫 (Microsoft Access 數(shù)據(jù)庫:數(shù)據(jù)和對象(如表、查詢或窗體)組成的,與特定的主題或用途有關(guān)。)。
可以使用“數(shù)據(jù)庫向?qū)А眮韯?chuàng)建數(shù)據(jù)庫。通過該向?qū)Э梢詮膬?nèi)置模板中進行選擇,然后對其進行一定程度的自定義。隨后,該向?qū)閿?shù)據(jù)庫創(chuàng)建一組表、查詢、窗體和報表,同時還會創(chuàng)建切換面板。表中不含任何數(shù)據(jù)。如果內(nèi)置模板中的某個模板非常符合您的要求,請使用該方法。
使用“數(shù)據(jù)庫向?qū)А眲?chuàng)建數(shù)據(jù)庫
利用簡鎮(zhèn)“數(shù)據(jù)庫向?qū)А?,用一步操作即可為所選數(shù)據(jù)庫類型創(chuàng)建必需的表、窗體和報表。這是創(chuàng)建數(shù)據(jù)庫的最簡單方法。該向?qū)峁┝擞邢薜倪x項來自定義數(shù)據(jù)庫。
單擊工具欄上的“新建”。
在“新建文件”任務(wù)窗格中,在“模板”下,單擊“本機上的模板”。
在“數(shù)據(jù)庫”選項卡上,單擊要創(chuàng)建的數(shù)據(jù)庫類型的圖標,然后單擊“確定”。
在“文件新建數(shù)據(jù)庫”對話框中,指定數(shù)據(jù)庫的名稱和位置,然后單擊“創(chuàng)建”。
按照“數(shù)據(jù)庫向?qū)А钡闹笇?dǎo)進行操作。
如果向?qū)磫?
這可能是因為 Access 正運行于沙盒模式,但您的計算機上尚未安裝 Microsoft Jet 4.0 SP8 或更高版本。啟用沙盒模式后,必須安裝有 Jet 4.0 SP8 或更高版本,Access 才能完全發(fā)揮作用。
有關(guān)安裝 Jet 升級的詳細信息,請參閱 Office Online 文章關(guān)于 Microsoft Jet 4.0 SP8 或更高版本。
有關(guān)沙盒模式的詳細信息,請參閱 Office Online 文章關(guān)于 Microsoft Jet Expression Service 沙盒模式。
注釋 不能使用“數(shù)據(jù)庫向?qū)А毕蛞延械臄?shù)據(jù)庫中添加新的表、窗體或報表。
如果正在使用 Access 2023,可以在 中搜索 Access 模板。下載模板是創(chuàng)建數(shù)據(jù)庫的最快方式。如果您找到了非常符合要求的模板,請使用該方法。模板是一個包含表、查詢、窗體和報表的 Access 數(shù)據(jù)庫文件 (*.mdb)。表中不含任何數(shù)據(jù)。打開數(shù)據(jù)庫后,可以自定義數(shù)據(jù)庫和對象。
使用模板創(chuàng)建數(shù)據(jù)庫
這是創(chuàng)建數(shù)據(jù)庫的最快方式。如果能找到并使用與您的要求非常接近的模板,則此方法效果更佳。
在工具欄上單擊“新建”。
在“新建文件”任務(wù)窗格中,在“模板”下,搜索特定的模板,或單擊“Office Online 模攔臘粗板”找到合適的模板。
找到需要的 Access 模板,然后單擊“下載”。
如果要基于自己的設(shè)計創(chuàng)建數(shù)據(jù)庫,請先創(chuàng)建一個空數(shù)據(jù)庫,然后再分別添加表、窗體、報表及其他對象。這是最靈活的方法,但需要分別定義每一個數(shù)據(jù)庫元素。
不使用“數(shù)據(jù)庫向?qū)А眲?chuàng)建空數(shù)據(jù)庫
單擊工具欄上的“新建”。
在“新建文件”任務(wù)窗格中的“新建”下,單擊“空數(shù)據(jù)庫”。
在“文件新建數(shù)據(jù)庫”對話框中,指定數(shù)據(jù)庫的名稱和位置,然后單擊“創(chuàng)建”。
然后將出現(xiàn)“數(shù)據(jù)庫”窗口 (數(shù)據(jù)庫窗口:在打開 Access 數(shù)據(jù)庫或 Access 項目時出現(xiàn)的窗口。它顯示用于新建數(shù)據(jù)庫對象和打開現(xiàn)有對象的快捷方式。),現(xiàn)在便可以在數(shù)據(jù)庫中創(chuàng)建所需的對象 (數(shù)據(jù)庫對象:Access 數(shù)據(jù)庫包含諸如表、查詢、窗體、報表、頁、宏和模塊等對象;Access 項目包含諸如窗體、報表、頁、宏和模塊等對象。)?!?>
問題五:怎樣在mysql中創(chuàng)建數(shù)據(jù)庫 是這句:創(chuàng)建一個數(shù)據(jù)庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
基本操作:MySQL中新建用戶,新建數(shù)據(jù)庫,用戶授權(quán),刪除用戶,修改密碼的相關(guān)操作測試環(huán)境:WIN32 mysql5.0.45注:本操作是在WIN命令提示符下,phpMyAdmin同樣適用。
用戶:phplamp 用戶數(shù)據(jù)庫:phplampDB1.新建用戶。登錄MYSQL
@>mysql -u root -p
@>密碼
創(chuàng)建用戶
mysql> insert into mysql.user(Host,User,Password) values(localhost,phplamp,password(1234));
刷新系統(tǒng)權(quán)限表
mysql>flush privileges;
這樣就創(chuàng)建了一個名為:phplamp 密碼為:1234 的用戶。然后登錄一下。mysql>exit;
@>mysql -u phplamp -p
@>輸入密碼
mysql>登錄成功2.為用戶授權(quán)。登錄MYSQL(有ROOT權(quán)限)。我里我以ROOT身份登錄.
@>mysql -u root -p
@>密碼
首先為用戶創(chuàng)建一個數(shù)據(jù)庫(phplampDB)
mysql>create database phplampDB;
授權(quán)phplamp用戶擁有phplamp數(shù)據(jù)庫的所有權(quán)限。
>grant all privileges on phplampDB.* to identified by ‘1234’;
刷新系統(tǒng)權(quán)限表
mysql>flush privileges;
mysql>其它操作/*
如果想指定部分權(quán)限給一用戶,可以這樣來寫:
mysql>grant select,update on phplampDB.* to identified by ‘1234’;
刷新系統(tǒng)權(quán)限表。
mysql>flush privileges;
*/3.刪除用戶。@>mysql -u root -p
@>密碼
mysql>DELETE FROM user WHERE User=phplamp and Host=localhost;
mysql>flush privileges;
刪除用戶的數(shù)據(jù)庫
mysql>drop database phplampDB;4.修改指定用戶密碼。@>mysql -u root -p
@>密碼
mysql>update mysql.user set password=password(‘新密碼’) where User=phplamp and Host=localhost;
mysql>flush privileges;5.列出所有數(shù)據(jù)庫mysql>show database;6.切換數(shù)據(jù)庫mysql>use ‘數(shù)據(jù)庫名’;7.列出所有表mysql>show t……>>
問題六:怎么創(chuàng)建數(shù)據(jù)庫連接 方法一、通過編寫代碼來連接數(shù)據(jù)庫
1定義連接字符串。Data Source=服務(wù)器;Initial Catalog=數(shù)據(jù)庫名;User ID=用戶名;Pwd=密碼 如:Data Source=IDEA-PC\SQLEXPRESS;Initial Catalog=student;User ID=sa;
2創(chuàng)建Connection對象。 SqlConnection sqlconnection1=new SqlConnection(constring);
constring為連接字符串。
3打開與數(shù)據(jù)庫的鏈接。 Sqlconnection1.Open();
4這時數(shù)據(jù)庫就連接成功,可以操作數(shù)據(jù)庫了。
方法二、通過拖拽形式建立數(shù)據(jù)庫連接
1打開視圖–>服務(wù)器資源管理器。
2右鍵點就數(shù)據(jù)連接,選擇添加連接。
3選擇服務(wù)器名(先刷新一下)–>登陸到服務(wù)器身份驗證形式–>選擇一個數(shù)據(jù)庫名–>測試鏈接–>確定(如果測試鏈接成功的話)。
4這是建立數(shù)據(jù)庫連接就成功了,可以使用了。
問題七:sqlserver 下怎么建立數(shù)據(jù)庫 怎么建表 方法/步驟
1
首先我們打開SQL SERVER自帶的數(shù)據(jù)庫管理工具,從開始菜單中可以找到,如圖點擊進去;
2
開始連接SQL SERVER服務(wù)器,就是我們裝好的SQL SERVER 服務(wù)器;
3
右擊數(shù)據(jù)庫,選擇之一個,新建一個數(shù)據(jù)庫;
4
填寫數(shù)據(jù)庫的名稱,下面是設(shè)置自動增長的,一般不用管,默認
5
點擊確定后就可以生成一個數(shù)據(jù)庫,此時里面是沒有表的;
6
右擊表新建一個表,填寫你要的字段名稱
7
填完字段名稱后點擊字段名稱那個內(nèi)部窗口的小叉叉,然后就提示你輸入表名了,填寫下表名,一個數(shù)據(jù)庫的建立過程就是這樣的;
或者
create database stuDB
on primary — 默認就屬于primary文件組,可省略
(
/*–數(shù)據(jù)文件的具體描述–*/
name=’stuDB_data’, — 主數(shù)據(jù)文件的邏輯名稱
filename=’D:\stuDB_data.mdf’, — 主數(shù)據(jù)文件的物理名稱
size=5mb, –主數(shù)據(jù)文件的初始大小
maxsize=100mb, — 主數(shù)據(jù)文件增長的更大值
filegrowth=15%–主數(shù)據(jù)文件的增長率
)
log on
(
/*–日志文件的具體描述,各參數(shù)含義同上–*/
name=’stuDB_log’,
filename=’D:\stuDB_log.ldf’,
size=2mb,
filegrowth=1mb
)
問題八:oracle數(shù)據(jù)庫怎么創(chuàng)建新用戶? 在CRT中進入oracle –連接sqlplus
按照下面寫完代碼直接復(fù)制進去回車就行了
—建立用戶代碼為:CREATE USER 用戶名字 PROFILE DEFAULT IDENTIFIED BY 密碼 DEFAULT TABLESPACE 指定表空間名字 TEMPORARY TABLESPACE 臨時表空間 ACCOUNT UNLOCK;
—賦權(quán)
begin
EXECUTE IMMEDIATE ‘GRA?T SELECT ANY DICTIONARY TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT ALTER ANY TABLE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT ALTER SYSTEM TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT ALTER ANY PROCEDURE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CONNECT TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE ANY PROCEDURE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE ANY TABLE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE ANY INDEX TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE DATABASE LINK TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE PUBLIC DATABASE LINK TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE ANY VIEW TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE PUBLIC SYNONYM TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT CREATE TABLE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DELETE ANY TABLE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP PUBLIC DATABASE LINK TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP ANY TRIGGER TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP ANY INDEX TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP ANY PROCEDURE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP ANY TABLE TO 用戶名’;
EXECUTE IMMEDIATE ‘GRANT DROP ANY VIEW TO 用戶名’;
……>>
問題九:如何創(chuàng)建數(shù)據(jù)庫 1、通過向?qū)Ы⒑褪褂脭?shù)據(jù)庫
之一步:選擇服務(wù)視圖,然后展開DataBase(數(shù)據(jù)庫節(jié)點),右鍵點擊JavaDB
啟動服務(wù)器
2、在右鍵單擊JavaDB,選擇創(chuàng)建數(shù)據(jù)庫
3、在彈出的對話框中填寫相應(yīng)的名稱,寫完后點擊確定完成的數(shù)據(jù)的創(chuàng)建。
如何搭建.NET Entity Framework分布式應(yīng)用系統(tǒng)框架
至.net FrameWork 3.5 sp1時,才推出Entity FrameWork,可以通過實現(xiàn)不同的Provider來支持不同的數(shù)據(jù)庫(當然微軟還是只內(nèi)置SQL Server的Provider,其它數(shù)據(jù)庫的Provider么,需要第三方開發(fā))。EF加上linq,這是.net開發(fā)上的一個巨大進步,.net程序員以對象方式操作數(shù)據(jù),以類sql語法在程序里查詢數(shù)據(jù),大大減少了繁瑣的構(gòu)造SQL語句的工作,可以更加專注于編寫業(yè)務(wù)邏輯代碼。但是在多層架構(gòu)的分布式應(yīng)用系統(tǒng)中,實體對象通過遠程序列化到客戶端時,這些實體會與其數(shù)據(jù)上下文(也就是實體容器)分離,在客戶端無法對實體直接進行查詢以及CUD(Create,Update,Delete)操作,下面以SQL Server為數(shù)據(jù)庫,Remoting+Entity Framework3.5作為數(shù)據(jù)服務(wù)層,WinForm作為客戶端,講述一下如何使用EF框架搭建多層分布式應(yīng)用系統(tǒng)。 二、 技術(shù)分析 1. 通過遠程客戶端傳輸過來的實體,都是處于分離狀態(tài)(EntityState屬性值為Detached),所以在多層應(yīng)用程序中的服務(wù)端實現(xiàn)實體的更新或刪除時,關(guān)鍵是如何把實體附加回實體容器中。MSDN上關(guān)于對分離實體的查詢和CUD操作描述如下: 1) 附加對象(實體框架) 在實體框架的某個對象上下文內(nèi)執(zhí)行查詢時,返回的對象會自動附加到該對象上下文。困老還可以將從源而不是從查詢獲得的對象附加到對象上下文。您可以附加以前分離的對象、由 NoTracking 查詢返回的對象或從對象上下文的外部獲取的對象。還可以附加存儲在 ASP.NET 應(yīng)用程序的視圖狀態(tài)中的對象或從遠程方法調(diào)用或 Web 服務(wù)返回的對象。 使用下列方法之一將對象附加到對象上下文: · 調(diào)用 ObjectContext 上的 AddObject 將對象附加到對象上下文。當對象為數(shù)據(jù)源中尚不存在的新對象時采用此方法。 · 調(diào)用 ObjectContext上的Attach 將對象附加到對象上下文。當對象已存在于數(shù)據(jù)源中但當前尚未附加到上下歲尺納文時采用此方法。有關(guān)更多信息,請參見如何:附加相關(guān)對象(實體乎沒框架)。 · 調(diào)用 ObjectContext的AttachTo,以將對象附加到對象上下文中的特定實體集。如果對象具有 null(在 Visual Basic 中為 Nothing)EntityKey 值,也可以執(zhí)行此操作。 · 調(diào)用 ObjectContext上的ApplyPropertyChanges。當對象已存在于數(shù)據(jù)源中,并且分離的對象具有您希望保存的屬性更新時采用此方法。如果簡單地附加該對象,則屬性更改將丟失。有關(guān)更多信息,請參見如何:應(yīng)用對已分離對象的更改(實體框架)。 2) 應(yīng)用對已分離對象的更改(實體框架)示例代碼 View Code2. 實現(xiàn)動態(tài)條件查詢。在本地環(huán)境中,對于Linq,我們可以通過動態(tài)構(gòu)造Lambda表達式樹來實現(xiàn)動態(tài)條件查詢,但是在遠程環(huán)境中,Lamdba表達式不支持遠程序列化傳輸,只能通過ObjectContext的CreateQuery方法實現(xiàn),但幸好微軟后來又提供了一個LINQ動態(tài)查詢擴展庫Dynamic.cs,使用起來更方便,于是采用它實現(xiàn)。 3. EF中核心抽象類是ObjectContext,實體容器都從它派生,實體容器上的CUD方法其實都是通過調(diào)用ObjectContext的CUD操作方法實現(xiàn)的。1) AddObject(string,object):表示添加實體object到實體容器,只要實體的EntityKey值為空,無論是否Detached狀態(tài)均可以通過此方法實現(xiàn)添加操作。2) ApplyPropertyChanges(string,object)表示把分離狀態(tài)的實體object上的所作的修改更新回容器中已存在的對應(yīng)的實體,執(zhí)行條件有兩個:①實體處于分離狀態(tài),②實體容器中存在主鍵值與其相同的且為Unchanged狀態(tài)的實體,所以,當我們需要更新一個Detached狀態(tài)的實體時,可以先把一個具有原始值的相同鍵值的實體附加回容器中,或者直接執(zhí)行一下查詢,從數(shù)據(jù)庫中取出該實體。3) DeleteObject(object)表示從實體容器中刪除一個實體,執(zhí)行條件是該實體存在于實體容器中,所以刪除一個Detach狀態(tài)的實體之前,需要把它通過Attach方法附加回實體容器中。 4. 實體對象也是基于抽象類EntityObject派生的,由此我們完全可以用ContextObject和EntityObject實現(xiàn)服務(wù)端對實體的查詢和CUD方法,其實現(xiàn)子類在運行時由客戶端注入,從而使服務(wù)端和數(shù)據(jù)庫實現(xiàn)松耦合。 5. 下圖是MSDN上關(guān)于在數(shù)據(jù)訪問層中使用 LINQ to SQL 的 n 層應(yīng)用程序的基本體系結(jié)構(gòu)圖,其實EF的結(jié)構(gòu)也是一樣的,不過是把DataContext換成ObjectContext。三、 動手開發(fā) 1. 利用EF建立數(shù)據(jù)庫概念模型新建一個解決方案EFServiceSystem,添加一個新項目,命名為EFModel,添加項目,在項目下添加一個ADO.NET Entity Data Model項,命名為EFModel.edmx,選擇從數(shù)據(jù)庫生成(假設(shè)我們已經(jīng)建好了一個SQL Server數(shù)據(jù)庫),一路點擊下一步,直至完成。編譯項目成功后就算完成。為什么要把數(shù)據(jù)庫模型單獨編譯成一個dll呢,我將在后面給予解釋。 2. 建立數(shù)據(jù)服務(wù)層在解決方案下再添加一個類庫項目,命名為EFService。1) 利用外觀模式,我們把客戶端常用的查詢和CUD操作方法簡化為3個方法Query,Save(T t),Delete(T t),根據(jù)針對接口編程的設(shè)計原則,定義一個CUD方法接口供客戶端調(diào)用。 View Code2) 實現(xiàn)類EntityHelper的代碼。主要思路是通過構(gòu)造函數(shù)注入數(shù)據(jù)上下文實例名稱,在配置文件取出其程序集限定名,通過反射創(chuàng)建實例,調(diào)用實例的相應(yīng)方法實現(xiàn)接口。 View Code3) 最后,我們創(chuàng)建一個服務(wù)工廠類,暴露給客戶端,負責以接口方式向客戶端提供遠程服務(wù)對象,數(shù)據(jù)服務(wù)層創(chuàng)建完畢。 View Code4) 補充一下Dynamic.cs的內(nèi)容,省得你去網(wǎng)上找了View Code3. 創(chuàng)建運行服務(wù)的宿主程序。實際開發(fā)中,通常選擇創(chuàng)建一個windows服務(wù)程序來運行Remoting,但是服務(wù)需要安裝才能啟動,運行和調(diào)試起來都比較繁瑣,所以這里創(chuàng)建一個簡單的控制臺程序來運行它。在解決方案下添加一個控制臺程序項目,在program.cs編寫如下代碼: View Code配置文件App.Config主要包括數(shù)據(jù)庫連接信息以及自己定義一個數(shù)據(jù)上下文名稱(這里和數(shù)據(jù)庫連接名稱相同,事實上不必相同),數(shù)據(jù)庫連接信息可以從EFModel項目中配置文件中直接拷貝過來。內(nèi)容如下: View Code編譯成功后,拷貝EFModel和和EFService兩個項目生成的dll文件至可執(zhí)行文件EFServiceHost.exe同一目錄下,點擊運行EFServiceHost.exe。 4. 最后,我們建立一個winform客戶端作為測試。在program.cs注冊遠程服務(wù): View Code四、 部署應(yīng)用 1. 至此,整個系統(tǒng)搭建完畢。在本例中,我把所有項目都統(tǒng)一建立在一個解決方案下,其實是為了演示方便,實際開發(fā)時候,完全可以各自獨立創(chuàng)建。下面我們來分析一下各個項目的職能和相互之間的引用關(guān)系。 1) EFModel:由Visual Studio 的數(shù)據(jù)模型工具生成的數(shù)據(jù)庫實例模型,提供數(shù)據(jù)的查詢以及CUD操作。不需引用其它項目。 2) EFService:使用數(shù)據(jù)庫實例模型以及實體的抽象基類編寫完成,代碼里不涉及具體數(shù)據(jù)庫模型實例,運行時通過客戶端注入?yún)?shù)和讀取配置文件動態(tài)生成數(shù)據(jù)庫模型實例,并調(diào)用實例的查詢和CUD方法實現(xiàn)客戶端的請求。不需引用其它項目。 3) EFServiceHost:負責運行Remoting服務(wù),如果通過配置文件方式發(fā)布服務(wù)的話,編譯時也不需引用其它項目,我這里引用了EFService項目,是因為使用了代碼方式暴露EFSservice的服務(wù)類。運行時需要將EFService和EFModel的dll文件拷貝至運行目錄下。 4) EFClient:需要引用EFModel和EFService。(注:因為本例中式使用了Remoting作為遠程服務(wù),如果是WebService或者WCF則只需添加服務(wù)引用,然后在本地生成客戶端代理類)。事實上EFService中的實現(xiàn)類EntityHelper也可以獨立出去,不必讓客戶端引用,對于客戶端而言,僅僅是使用ServiceFactory和接口IentityHelper就足夠了。這樣只要接口不變,EntityHelper更新的時候,客戶端無須更新引用,而且服務(wù)端代碼可以完全被隔離開客戶端,對一些服務(wù)端和客戶端之間的保密性比較敏感的項目尤為有利。 2. 通過分析我們發(fā)現(xiàn),在開發(fā)下一個新項目的時候,即使整個數(shù)據(jù)庫都變了,從SQL SERVER變成Oracle,數(shù)據(jù)庫服務(wù)名變了,表也變了,我們?nèi)匀粺o需修改服務(wù)端代碼,只需針對新的數(shù)據(jù)庫,生成新的EFModel,然后拷貝DLL文件至EFServiceHost的運行目錄下(這也就是我為什么要把EFModel獨立成一個項目的原因),再修改一下EFServiceHost的配置文件中的數(shù)據(jù)庫連接和實體容器名稱即可完成新系統(tǒng)的部署。對于客戶端來說,也就是更新一下EFModel.dll,還是調(diào)用服務(wù)端提供的那幾個API,便可完成查詢和CUD操作,不用關(guān)心底層的數(shù)據(jù)庫是SQL Server還是Oracle,更不用自己實現(xiàn)對新庫新表的查詢和CUD操作(本來也不用)。當然,對于正在運行的系統(tǒng),我們也可以針對新建數(shù)據(jù)庫生成新的實體模型DLL,拷貝至EFServiceHost運行目錄下,實現(xiàn)熱插拔方式擴展數(shù)據(jù)庫,而對原來的系統(tǒng)毫無影響,即使新加的庫是不同類型的庫。 五、 系統(tǒng)架構(gòu)圖示 六、 總結(jié) 從以上分析可以看出,該系統(tǒng)運用到項目開發(fā)中,對服務(wù)端來說,實現(xiàn)了更大程度組件重用(零代碼修改),對客戶端開發(fā)來說,高度簡化了對數(shù)據(jù)的操作命令,并封裝了實現(xiàn)細節(jié),大大降低了開發(fā)的技術(shù)難度,提高了開發(fā)速度。當然,我這里寫的代碼僅僅是最簡單的演示代碼,在實際項目開發(fā)中,服務(wù)端要處理的細節(jié)和擴展的功能要比這復(fù)雜得多。比如性能優(yōu)化,實現(xiàn)復(fù)雜查詢和批量CUD操作,并發(fā)處理,事務(wù)控制,日志跟蹤,數(shù)據(jù)緩存等等。另外,如果各層采用不同的技術(shù)實現(xiàn),服務(wù)層實現(xiàn)的代碼也有差異。比如EF可以選擇最新版的更完善更強大的EF4.0,遠程服務(wù)可以選擇Remoting,WebService,WCF等,不同的遠程服務(wù),宿主程序也有所不同,Remoting和WCF可以選擇winform,控制臺程序,IIS,而Web Service只能選擇IIS。不同的服務(wù),不同的宿主程序,會有不同的通信通道 (Http,Tcp),不同的數(shù)據(jù)傳輸格式 (二進制,XML,ON)。如果你嫌上面的實現(xiàn)方式涉及的技術(shù)太多,開發(fā)起來太麻煩,那么,微軟現(xiàn)成的具有REST風格的遠程數(shù)據(jù)服務(wù)WCF Data Services會是你的更佳選擇。
.net新建數(shù)據(jù)庫上下文類的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于.net新建數(shù)據(jù)庫上下文類,快速創(chuàng)建數(shù)據(jù)庫上下文類——.NET指南,怎么創(chuàng)建數(shù)據(jù)庫,如何搭建.NET Entity Framework分布式應(yīng)用系統(tǒng)框架的信息別忘了在本站進行查找喔。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機租用。成都機房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長,共創(chuàng)價值。
標題名稱:快速創(chuàng)建數(shù)據(jù)庫上下文類——.NET指南(.net新建數(shù)據(jù)庫上下文類)
當前地址:http://www.5511xx.com/article/ccosoie.html


咨詢
建站咨詢
