ADO.NET Entity Framework:由 Entity Object 執行 SQL 指令

我們就以前面的文章:[VS2010] ADO.NET Entity Framework: 建立多對多關聯模型所建立的資料模型,來玩玩看這些功能吧。

 

1. 測試傳回內建型別的資料,請在 Main 方法中加入下列程式碼並執行:

 

static void Main(string[] args)
{
    using (SchoolDBContainer context = new SchoolDBContainer())
    {
        foreach (string courseName in
context.ExecuteStoreQuery("SELECT name FROM CoursesSet"))
        {
            Console.WriteLine("Course name: {0}", courseName);
        }
    }

    Console.ReadLine();
}

 

你應該會看到類似這樣的輸出:9914353_201006281646381.jpg

 

 

ExecuteStoreQuery() 透過傳入的 SQL 指令以及參數,將資料庫回傳的資料集以指定的型別來回傳,以上面的例子來說,就是把 CoursesSet 中的 name 屬性轉換成 string 型別的集合回傳,因為回傳的是一個 IEnumerate的集合,故可以直接使用 foreach 來巡覽並存取每個集合中的物件。它的第一個參數是 SQL 指令,第二個參數是 params 的參數陣列。ExecuteStoreQuery() 可以支援的參數類型有三種:

 

1. 使用 pattern 方式的參數指定,例如 ExecuteStoreQuery(“SELECT name FROM CoursesSet WHERE CourseID = {0}”, 1234),當然,這會有 SQL Injection 的問題,因此最好不要使用。

2. 使用參數化查詢方式的參數指定,例如 ExecuteStoreQuery(“SELECT name FROM CoursesSet WHERE CourseID = @p0”, 1234),這是建議的作法。

3. 若想要對參數有更進一步的控制,可以直接傳入 DbParameter 物件,例如 ExecuteStoreQuery(“SELECT name FROM CoursesSet WHERE CourseID = @p0”, new SqlParameter(“@p0”, 1234))

 

2. 測試以類別裝載傳回的資料,請在 Main 方法中加入下列程式碼並執行:

 

public class Course
{
    public string CourseID { get; set; }
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (SchoolDBContainer context = new SchoolDBContainer())
        {
            foreach
(Course course in context.ExecuteStoreQuery("SELECT * FROM CoursesSet"))
            {
                Console.WriteLine("Course ID: {0}, name: {1}", course.CourseID, course.Name);
            }
        }

        Console.ReadLine();
    }
}

 

你應該可以看到這個畫面:9914353_201006281646382.jpg

 

如果要傳回的是一組資料,而且具有明確的類別物件,可以在 中設定該物件類別,由 ExecuteStoreQuery來自動幫我們將傳回的資料裝載到物件的屬性中,當然,該物件有幾個條件必須符合:

1. 物件必須有預設無參數建構式,並且不是抽象類別。

2. 屬性名稱必須要與欄位名稱對應。

3. 屬性必須要是可讀寫 (read/write) 的。

 

若指定的類別中出現無法與欄位名稱對應的屬性時,ExecuteStoreQuery會略過該屬性的讀取,執行進行下一個屬性欄位的讀取,因此會發生資料遺漏的問題。

 

fj.png1.JPG

fj.png2.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9914353/viewspace-666510/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9914353/viewspace-666510/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值