2013-10-05 90 views
1

我正在使用VS2012中的MVC4和EF數據優先項目。該表的主鍵在字段名中沒有「id」,因此EF不理解它應該將其用作主鍵。 EF生成代碼後,我添加了以下注釋和使用語句。EntityFrameWork DataFirst和MVC

using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

public partial class Game 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int GameNumber { get; set; } 

如果我基於我的模型生成代碼,我所做的自定義更改將被丟棄,如果我更新數據庫模型。如何保留我的自定義更改並更新數據庫EF數據模型。

感謝

+0

只需將它標記爲edmx圖中的PK即可。但是,當EDMX第一次建成時,爲什麼EF沒有把它當作主鍵?它應該有,如果它在數據庫中被定義爲PK。 –

+0

我看到你有答案,但你可以(也應該)在edmx中做這些事情。這裏真的不需要哥們班。我仍然想知道爲什麼你在商店模型中似乎沒有PK。 –

回答

0

使用MetadataTypeAttributeMSDN)來定義上的部分實現實體類的元數據類,然後裝飾在元數據類的屬性。

請注意裝飾的部分類實現應該存在於自動生成的文件以外的文件中,以便從數據庫中持久刷新。

(問題:如果你的模型是數據庫優先,爲什麼它不知道Game表的PK是什麼?最後是否有Id在最後讀取表模式時並不重要生成模型...)

[MetadataType("GameMetadata")] 
public partial class Game 
{ 
    public class GameMetadata 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int GameNumber; 
    } 
} 
+0

完美,找到了我正在尋找的東西。 – Gearbolt