2011-03-22 189 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