您可以查看一些可覆蓋的方法,例如SaveChanges
,您可以在實體到達數據庫之前對它們進行調整。
這裏有一個例子直接從一些代碼,我們在店裏,我們確保一個ReadOnlyContext
不寫什麼到DB:
public class ReadOnlyEntities : Entities
{
public bool EnforceReadonlyBehavior { get; set; }
public ReadOnlyEntities(string connectionString)
: base(connectionString)
{
EnforceReadonlyBehavior = true;
}
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
if (EnforceReadonlyBehavior)
{
if (
ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added).Any()
||
ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified).Any()
||
ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted).Any()
)
{
throw new InvalidOperationException("nope");
}
}
return base.SaveChanges(options);
}
}
這可以讓你做很多有趣的事情,如自動設置一些值(創建日期/修改日期)。您還可以在OnContextCreated
中創建上下文,您可以在其中設置所有類型的特定行爲。
實體本身也有一些局部方法。看看edmx後面的reference.cs文件中生成的內容,找到可以在數據訪問層中鉤住某些行爲的位置
正如Ben Robinson指出的那樣,這與linq無關,而與生成的代碼在實體框架或LINQ到SQL。
Linq僅用於檢索數據,在Linq中沒有等價的數據庫觸發器。您可以編寫一些代碼,在每次創建/更新/刪除特定實體時執行某些操作,但這與Linq無關。 – 2014-09-25 09:26:58
我從來沒有談論linq,我提到兩個框架名稱爲「linq to sql」和「linq to entities」,兩個框架都處理數據存儲。如果它被包裝在odata服務或其他東西中,我也會感興趣。 (只要它是開箱即用的)。 – 2014-09-25 11:28:22
ORM框架稱爲實體框架,Linq to Entities僅僅是實體框架的Linq提供者。 – 2014-09-25 11:33:36