我想在我的實體類中使用.Id作爲唯一ID,但是我們的dba想要在數據庫表中使用[tablename] Id。有沒有一種方法可以使Entity Framework自動創建此映射,而無需爲每個實體創建新的映射文件?在Entity Framework中,是否可以將列自動映射到實體屬性? ID => [tablename] ID
回答
只要我理解正確的話,你有這樣的:
public class Foo
{
public Int32 ID { get; set; }
// ...
}
public class Bar
{
public Int32 ID { get; set; }
// ...
}
而且,沒有太多努力(或創建多個entityTypeConfiguration<T>
型號)你想沿着以下結果的東西線:
Current Mapping Desired Mapping
[Foo] [Foo]
ID FooID
... ...
[Bar] [Bar]
ID BarID
... ...
爲此,幾個方法存在(並取決於哪EF的版本,你全光照G)。隨着中說,一些平易近人的戰術:
ColumnAttribute
您可以訪問每一個實體模型,裝飾用ColumnAttribute
ID屬性。這告訴EF,儘管我們將命名爲該列,但我們想要其他的成爲數據庫中的名稱。例如
public class Foo
{
[Column("FooID")]
public Int32 ID { get; set; }
// ...
}
public class Foo
{
[Column("BarID")]
public Int32 ID { get; set; }
// ...
}
這裏唯一的問題是,你現在要去每個模型,並添加屬性。
OnModelCreating &流利的映射
另一種方法是做映射,但保持在同一個地方。 OnModelCreating
事件對於這類事情非常有用。
public class MyDbContext : DbContext
{
public Dbset<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
protected override void OnmodelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>()
.Property(x => x.ID).HasColumnName("FooID");
modelBuilder.Entity<Bar>()
.Property(x => x.ID).HasColumnName("BarID");
}
}
再一次,這裏的問題是你正在爲每個實體創建一個配置。
自約定
由於EF6的,你可以使用自定義的公約,這使得事情變得更容易(包括開發自己的慣例,這將使ID
= TableNameID
)。不幸的是,我沒有時間寫一個例子,但docs非常有啓發性。
這是完美的!我使用的是代碼優先的方法,因此添加列屬性是完美的。謝謝! – MaxOctane
根據MSDN,both way應該工作。
主鍵檢測不區分大小寫。公認的命名模式 是,按優先順序:「ID」 [類型名稱]編號
我不認爲這是問題(除非我錯誤閱讀)。我認爲他們希望保留'ID'並將其保存爲'TableNameID'(但不需要單獨修飾/配置每個實體)。[或者至少我是這樣讀的] –
- 1. 是否可以將hibernate實體映射爲id?
- 2. 自定義實體映射是否可以配置父屬性?
- 3. 在Entity Framework中將2個表映射到單個實體
- 4. 將多個表映射到Entity Framework中的單個實體
- 5. 如何將2+表映射到.NET Entity Framework中的實體?
- 6. 如何獲取TableName特定的實體屬性被映射到
- 7. Controller - > Service - > Repository:服務是否將實體映射到ViewModel?
- 8. 使用Entity Framework 5實體映射實體代碼
- 9. 功能NHibernate自動映射PrimaryKey屬性名稱不是「ID」
- 10. 由反射映射Id屬性
- 11. 是否可以自動創建自動映射器映射?
- 12. 在EF 4.1中映射子類是否需要ID屬性?
- 13. 在Entity Framework中可以自己實現ICollection <T>嗎?
- 14. 休眠映射:實體ID映射中的重複列
- 15. 實體屬性可以被來自同一實體的其他屬性映射嗎?
- 16. 通過動作過濾器屬性將實體自動映射到模型?
- 17. 將附加列映射到複合id,同時保留其屬性映射
- 18. 實體框架非空列映射到一個可空實體屬性
- 19. 小巧的將列映射到實體屬性?
- 20. 如何在Hibernate中將實體屬性映射到繼承SINGLE_TABLE的實體?
- 21. 實體框架 - 將實體只讀屬性映射到相關表的列
- 22. 如何將2+實體映射到.NET Entity Framework中的同一張表?
- 23. RestKit - 自動實體映射
- 24. 將NativeQuery映射到實體
- 25. 將實體框架中的屬性映射到不同類型
- 26. 我可以將不完整的sproc列映射到實體嗎?
- 27. 是否可以將Hibernate <component>列映射到自定義用戶類型?
- 28. 我們可以在Entity Framework中映射數據庫視圖嗎?
- 29. 是否可以將ID更改爲模型中的屬性?
- 30. 映射JSON屬性HTML ID可以輕鬆設定值
您是否考慮在上下文中使用流利的映射(每個ID一行)太多?還有'ColumnAttribute',但這也意味着打開每個實體並裝飾該屬性。 –
你可否詳細說明如何做到這一點?除了爲實體創建映射並將其添加到modelBuilder配置之外,我不知道其他任何方式。 – MaxOctane