C# 为实体CodeFirst Ef4定义主键

C# 为实体CodeFirst Ef4定义主键,c#,entity-framework-4,entity,C#,Entity Framework 4,Entity,我想为POCO实体定义一个主键,但我不想用主键属性修饰实体,我想从扩展DbContext的context类中定义它 我知道我应该使用类似于: Entity<Order>().HasKey(x => x.OrderId); Entity().HasKey(x=>x.OrderId); 但是我不知道在我的课堂上怎么做 有什么帮助吗?在您的DbContext-类中,您可以像这样重写关于模型创建的 protected override void OnModelCreating(Mo

我想为POCO实体定义一个主键,但我不想用主键属性修饰实体,我想从扩展DbContext的context类中定义它

我知道我应该使用类似于:

Entity<Order>().HasKey(x => x.OrderId);
Entity().HasKey(x=>x.OrderId);
但是我不知道在我的课堂上怎么做


有什么帮助吗?

在您的
DbContext
-类中,您可以像这样重写
关于模型创建的

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Order>.HasKey(x => x.OrderId);
    base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity.HasKey(x=>x.OrderId);
基于模型创建(modelBuilder);
}

您应该创建一个定义上下文的类,然后必须重写OnModelCreating方法。 试试这个:

public class MyContext: DbContext
{
     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
       modelBuilder.Entity<Order>().HasKey(x => x.OrderId);
       base.OnModelCreating(modelBuilder);
     }
}
公共类MyContext:DbContext
{
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasKey(x=>x.OrderId);
基于模型创建(modelBuilder);
}
}

实际上,抛出的stackoverflow异常“System.StackOverflowException”类型的未处理异常发生在mscorlib.dll中,我猜它一直在调用它自己,我发现这是我合理预期的现在每次访问它提供给我的数据库时:支持“DatabaseContext”上下文的模型在数据库创建后发生了更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用database.SetInitializer。例如,DropCreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可以选择使用新数据对其进行种子设定。修复后,您必须删除数据库,然后让它再次创建。这不是在您不从其他人处复制时发生的。