【问题标题】:Defining Primary Key for entity CodeFirst Ef4为实体 CodeFirst Ef4 定义主键
【发布时间】:2023-04-03 18:32:02
【问题描述】:

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

我知道我应该使用类似的东西:

Entity<Order>().HasKey(x => x.OrderId);

但我不知道如何在我的上下文类中做到这一点。

有什么帮助吗?

【问题讨论】:

    标签: c# entity-framework-4 entity


    【解决方案1】:

    DbContext-class 中,您可以像这样覆盖OnModelCreating

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Order>.HasKey(x => x.OrderId);
        base.OnModelCreating(modelBuilder);
    }
    

    【讨论】:

    • 实际上抛出的stackoverflow异常mscorlib.dll中发生了'System.StackOverflowException'类型的未处理异常我猜它一直在调用它自己
    • 我认为这是合理预期的
    • 现在每次我访问数据库时它都会给我:支持“DatabaseContext”上下文的模型自创建数据库以来发生了变化。手动删除/更新数据库,或使用 IDatabaseInitializer 实例调用 Database.SetInitializer。例如,DropCreateDatabaseIfModelChanges 策略将自动删除并重新创建数据库,并可选择为其添加新数据。
    • 修复它必须删除数据库,然后让它再次创建它。
    【解决方案2】:

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

    public class MyContext: DbContext
    {
         protected override void OnModelCreating(ModelBuilder modelBuilder)
         {
           modelBuilder.Entity<Order>().HasKey(x => x.OrderId);
           base.OnModelCreating(modelBuilder);
         }
    }
    

    【讨论】:

    • 不是在你不抄袭别人的时候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2021-11-27
    相关资源
    最近更新 更多