[Entity Framework] SQLite 透過 ObjectContext 進行資料異動

[Entity Framework] SQLite 透過 ObjectContext 進行資料異動

假設現在我們要更新一個表單,EDM模型長的像下圖這樣,當我要對資料進行新增、刪除、修改時該怎麼做呢?

image

 

更新資料:

EDM的更新並非直接反映到底層資料庫,它是先對指定的物件進行異動,最後再將異動更新到底層資料庫,若要對對底層資料庫進行異動更則呼叫 ObjectContext.SaveChanges 方法 


新增資料:

要先建立所需要新增的資料物件,然後將它加入到物件容器,新增資料所需的是 ObjectContext.AddObject 方法


{
    SQLiteDB_DemoEntities sql = new SQLiteDB_DemoEntities();

    Contact contact = new Contact();
    contact.ContactAddress = "address";
    contact.ContactID = 111;
    contact.ContactName = "Name";
    sql.AddObject("Contact", contact);
    sql.SaveChanges();
}

 

觀察實體資料庫

image

 

修改資料:

必需要先找到要修改的資料,修改完畢後再呼叫SaveChanges方法


{
    SQLiteDB_DemoEntities sql = new SQLiteDB_DemoEntities();
    System.Data.Objects.ObjectQuery find = sql.Contact;
    foreach (Contact item in find)
    {
        if (item.ContactID == 111)
        {
            item.ContactAddress = "修改過的Address";
            sql.SaveChanges();
            break;
        }
    }
}

 

觀察實體資料庫

image

換成LINQ的寫法


{
    SQLiteDB_DemoEntities sql = new SQLiteDB_DemoEntities();
    var find = from c in sql.Contact
               where c.ContactID == 111
               select c;

    Contact contact = find.First();
    contact.ContactAddress = "修改過的Address";
    sql.SaveChanges();
}

 

刪除資料:

與修改資料的邏輯相同。


{
    SQLiteDB_DemoEntities sql = new SQLiteDB_DemoEntities();
    var find = from c in sql.Contact
               where c.ContactID == 111
               select c;
    if (find.Count() != 0)
    {
        Contact contact = find.First();
        sql.DeleteObject(contact);
        sql.SaveChanges();
    }
}

 

刪掉後再觀察實體資料庫,就可以發現資料已經被刪掉了

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo