2

2 つのクラスを持つデータベースがあり、1 対多の関係が設定されています。これはショップとして設定されています (コードを実行しているメインクラスで、db でショップが販売する製品のカテゴリのリストに結合されています。

したがって、テーブルは次のとおりです。

shops 
int          id        //shopId & primaryKey
varchar(50) shopName  
...                    //other details left out.

ShopProductTypes
int          id       //Category id
int          ShopId   //Foreign Key to shop table
varchar(50)  CategoryName  
...

これはすべて簡単で、SQL ビューアーなどを介して機能します。

データベース モデルをインポートし、Pluralize / Singularize ボックスのチェックを外しました。

私の文脈は;

 public ReportingContext(string connectionString) : base(connectionString)
        {

            Database.SetInitializer<ReportingContext>(null);

        }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
      }

        public DbSet<AutoComp_Reporting.DAL.Shop> Shops{get; set;}

        public DbSet<AutoComp_Reporting.DAL.ShopProductTypes> ShopCategories { get; set; }

    }

しかし、私が走るとき。

var foo = (from s in context.Shops
          where (s.Id == id).select s).toList();

すべてのショップを表示できますが、QuickWatch でカテゴリを表示しようとすると、次の例外が発生します。

{"コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。"}

System.Data.EntityException {System.Data.EntityCommandExecutionException}

最終的に明らかになる巻き戻し。

    Message "Invalid column name 'Shops_Id'.\r\nInvalid column name 'Shops_Id'.\r\nInvalid column name 'Shops_Id'."

私はエンティティ フレームワークを初めて使用するので、何か間違っている可能性がありますが、このエラーを修正することはできません。MultipleActiveResultSets=Trueデータベース接続文字列を取得しました。

では、このエラーの原因を突き止めたり、修正したりするにはどうすればよいでしょうか? 実際の内部例外は、フレームワークがプロパティを解釈する方法にあると推測しているため、ニシンである可能性があります..

4

1 に答える 1

0

テーブル内の外部キーの名前を変更し、ForeignKey 属性を適用するとうまくいったようです。ただし、これは正しい解決策ではないと確信しています。それ以外の場合は、特定の命名規則に従って構築されたデータベースがある場合にのみ、フレームワークがそのままで機能することを意味します。

これはレガシー アプリケーションであることを念頭に置いてください。この問題を完全に解決するにはどうすればよいですか?

于 2013-02-18T14:16:37.340 に答える