【问题标题】:EDMX is overwriting Key data annotationsEDMX 正在覆盖关键数据注释
【发布时间】:2013-09-10 20:07:33
【问题描述】:

这适用于 EF 5 和数据库优先建模。我的模型是使用现有数据库中的 EF 生成器构建的。

我在模型类中使用 [Key] 数据注释,因为主键字段的名称不符合 EF 约定。

一切正常,但是当我打开根 EDMX 文件时,模型类会更新,我所做的任何手动更改都会丢失。

我应该以不同的方式进行更改吗?

【问题讨论】:

    标签: entity-framework edmx edmx-designer


    【解决方案1】:

    对我有用的解决方案是在上下文类的 OnModelCreating 方法中覆盖 EF 约定。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
    
            modelBuilder.Entity<abk_Bookings>()
                        .HasKey(e => e.booking_number);}
    

    【讨论】:

      【解决方案2】:

      您可以更新您的 T4 模板以在主键上为您添加数据注释吗?

      if (simpleProperties.Any())
      {
          foreach (var edmProperty in simpleProperties)
          {
           if (ef.IsKey(edmProperty)){
      #>
      [Key]
      <# } #>
      

      【讨论】:

      • 我以前从未使用过 tt 文件。我在 simpleProperties 上收到“当前上下文中不存在”错误,并且无法在线找到任何文档。有什么我遗漏的指示吗?
      • @EthanPelton - 检查 tt 文件中的第 66 行,您应该看到 foreach 已经存在变量 simpleProperties
      • 这解决了我的问题。我想知道为什么它默认不存在?
      • 这首先在数据库中不起作用,因为手动所做的任何更改都将被覆盖。
      • @EthanPelton 不正确,更改 T4 模板将永久更改类的生成。
      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 2011-12-08
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多