2011-03-22 227 views
31

我在我的MVC 3應用程序中創建了一個實體類。其中一個名爲RegistryId的屬性是主鍵以及外鍵。如何創建列主鍵以及外鍵?我不使用EF ORM設計器。我正在手工編寫課程。實體框架中的主鍵/外鍵

回答

55

我認爲「不使用EF ORM設計器」是指EF 4.1的新API DbContext。因爲如果你不是指DbContext API,你仍然需要使用EDMX(設計器)。

您可以使用數據標註(System.ComponentModel.DataAnnotations):KeyAttributeForeignKeyAttribute

public class Registry 
{ 
    public virtual int Id { get; set; } 
    public virtual MyEntity MyEntity { get; set; } 
} 

public class MyEntity 
{ 
    [Key, ForeignKey("Registry")] 
    public virtual int RegistryId { get; set; } 

    public virtual Registry Registry { get; set; } 
} 

或者你可以用流利的API(覆蓋在派生上下文OnModelCreating):

(編輯:流利的映射是反轉和不完整)

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<MyEntity>() 
       .HasKey(e => e.RegistryId); 
    modelBuilder.Entity<MyEntity>() 
       .Property(e => e.RegistryId) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    modelBuilder.Entity<MyEntity>() 
       .HasRequired(e => e.Registry) 
       .WithRequiredDependent(r => r.MyEntity); 
} 

其中MyEntity是您的實體與FK和Registry是1:1關係的主要實體。

+0

@Hi Ladislav:如果有一對多的關係呢? – DotnetSparrow 2011-03-22 16:42:25

+1

MyEntity中的一對多主鍵不能是外鍵。必須有其他FK財產或FK財產。 – 2011-03-22 16:44:58

+0

@Ladislav:當我嘗試使用[ForeignKEy(「」)]時,它要求列名稱。我是否需要向其內部註冊表或註冊表實體的ID? – DotnetSparrow 2011-03-22 16:48:50