2013-08-21 52 views
1

我正在使用EF代碼第一種方法。我開始製作映射文件(我來自nihbernate背景),但發現你真的不需要它們,除非你需要做一些改變。什麼是EF默認ID命名約定代碼優先?

我想知道它將用於我的ID的命名約定?

它會是Product_IdProductId

編輯

基礎上的評論,到目前爲止這讓我有點摸不着頭腦。我問,因爲我添加了2個新類(即表),並將它們掛鉤並重新創建了我的數據庫。

我的表中與我的新表有關係的FK都有「Product_Id」,我想也許是因爲我沒有映射它。

我剛剛嘗試過使用映射和相同的問題。

所有其他表關係都有Camel大寫。

編輯2

嗯時髦的東西是怎麼回事就在我的表具有相同的名稱兩次。一旦它將它視爲FK,而另一次它將它視爲一個常規列。

編輯3

想通了,談論它,並張貼在這裏幫我找出問題。究其原因,是因爲我在做POCO方式

public Product Product {get; set;} 
    public Guid ProductId { get; set; } 

我現在釋放我的ProductId我設置爲int類型所以發生了什麼事是它會產生一個在DB稱爲ProductID列,然後當它有時間使FK就不能使用了產品編號,不得不使用的product_id

+0

上駝峯 – zsong

+3

使用只是'Id'。爲什麼在屬性名稱中需要一個'Product',但是它已經在類名中? – MarcinJuraszek

+0

第二個 - ProductId。 EF將自動使用主鍵等字段 – VsMaX

回答

6

默認情況下,IdKeyDiscoveryConvention註冊,並根據其Documentation

主鍵檢測是不區分大小寫。公認的命名模式是,按優先順序:

'ID'

[類型名稱]編號

+0

「講一點不同的故事」:不是真的,它只是結合了「IdKeyDiscoveryConvention」和「 StoreGeneratedIdentityKeyConvention'](http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions.storegeneratedidentitykeyconvention%28v=vs.103%29.aspx)(看似缺少文檔)在一個單一的段。 – hvd

+0

是的。但只限於類型爲「Int16」,「Int32」或「Int64」的情況。 – haim770

+0

啊,這是一個好點。 「Guid」已經被刪除的事實令我感到驚訝。 – hvd

7

您可以使用ProductIdId,它會被識別爲實體框架的命名約定的主鍵。

如果您想打破約定,也可以使用關鍵數據註釋。

[Key] 
public int Product_Id {get;set;} //Note the underscore 

您還可以使用流利的API:

modelBuilder.Entity<Product>().HasKey(t => t.Product_Id); //Breaking convention again!