实体框架中的主/外键

时间:2011-03-22 07:33:38

标签: entity-framework-4 ef-code-first entity-framework-4.1

我在MVC 3应用程序中创建了一个实体类。名为RegistryId的属性之一是主键和外键。如何创建列主键和外键?我没有使用EF ORM设计师。我正在手工编写课程。

1 个答案:

答案 0 :(得分:55)

我认为“不使用EF ORM设计器”是指EF 4.1中的新DbContext API。因为如果你不是指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关系的主要实体。