你的問題很不清楚。你在說你是從你的模式中生成代碼,並且同時你在問是否有辦法先用代碼映射它。
DbContext API!=代碼第一種方法。人們應該在Fluent/Annotations映射和從代碼生成數據庫的代碼優先方法之間有所不同。如果您從數據庫生成代碼,那麼顯然使用數據庫優先方法。
數據庫優先解決方案:數據庫視圖,但它會使您的實體只讀。 Imho即使表格發生變化也不會有問題。如果您只需要兩列,並且沒有人會更改這兩列或創建新的所需列,則映射的團隊應該仍然可以工作。如果有人改變你的專欄,將不會有有效的方法來避免破壞你的代碼。
您還可以使用像QueryView(定位描述中的視圖)和DefiningQuery(定製選擇存儲描述中)的高級EDMX功能,但這些功能可能是針對您的方案矯枉過正的。
代碼優先解決方案:關閉模型元數據驗證和數據庫初始化。它需要設置初始化到null
:
// Use this code in the application start up
Database.SetInitializer<MyContext>(null);
和刪除IncludeMetadataConvetion
:
public class MyContext : DbContext
{
...
protedte override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
}
在兩種方法中,您還可以使用自定義的SQL查詢或自定義LINQ投影。
是的..我在想同樣的事情..謝謝你的回答... – jojo 2011-04-04 01:46:54