Entity framework 4 实体框架中的主键/外键

Entity framework 4 实体框架中的主键/外键,entity-framework-4,ef-code-first,entity-framework-4.1,Entity Framework 4,Ef Code First,Entity Framework 4.1,我在MVC 3应用程序中创建了一个实体类。名为RegistryId的属性之一是主键和外键。如何制作列主键和外键?我没有使用eformdesigner。我是手工编写类。我认为“不使用EF Form designer”是指EF 4.1中新的DbContextAPI。因为如果您不是指DbContextAPI,那么您仍然必须使用EDMX(设计器) 您可以使用数据批注(System.ComponentModel.DataAnnotations):KeyAttribute和ForeignKeyAttribu

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

我认为“不使用EF Form designer”是指EF 4.1中新的
DbContext
API。因为如果您不是指
DbContext
API,那么您仍然必须使用EDMX(设计器)

您可以使用数据批注(
System.ComponentModel.DataAnnotations
):
KeyAttribute
ForeignKeyAttribute

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; }
}
或者,您可以使用fluent API(在派生上下文中重写模型创建上的
):

(编辑:fluent映射已反转且不完整)

模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasKey(e=>e.RegistryId);
modelBuilder.Entity()
.Property(e=>e.RegistryId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity()
.HasRequired(e=>e.Registry)
.具有所需依赖性(r=>r.MyEntity);
}

其中,
MyEntity
是您的FK实体,
Registry
是1:1关系中的主体实体。

在MyEntity中有一对多主键不能是外键。必须有其他FK属性或没有FK属性。@Ladislav:当我尝试使用[ForeignKEy(“”)时,它要求输入列名。我需要给它里面的注册表或者注册表实体的Id吗?你是世界上最棒的输入者。谢谢你。@Ladislav:你就是那个人!:我在网上读了很多资料,但没有一个有用。这是一个简单而有效的答案。上帝保佑你的生命!:)@拉迪斯拉夫:你能看看这个问题吗?
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);
}