3

Entity Framework 5Visual Studio 2010Entity Framework Power Tools (Beta 2)拡張機能を使用。

これが私のデータベーステーブル構造です:

データベース テーブルの構造

前述の拡張機能のリバース エンジニア コード ファースト関数を使用して、POCO クラスといくつかの「マッピング」ファイル (正式な用語かどうかは不明) と単一の DbContext 派生クラスを生成しました。次に説明する変更を除いて、これらの生成されたクラスはすべて、パワー ツールによってそのまま生成されます。

オブジェクト グラフを少しフラットにするために、Category.cs ファイルに次のコードを追加しました。

private ICollection<Product> m_Products = null;
public ICollection<Product> Products
{
    get
    {
        if (m_Products == null)
        {
            m_Products = new List<Product>();
            foreach (var categoryProduct in CategoryProducts)
            {
                m_Products.Add(categoryProduct.Product);
            }
        }
        return m_Products;
    }
    set { m_Products = value; }
}

次の例外が発生します。これはマッピングと関係があるはずですが、これを完全に理解することはできません。

Unhandled Exception: System.Data.EntityCommandExecutionException: An error occurred while 
executing the command definition. See the inner exception for details.
 ---> System.Data.SqlClient.SqlException: 
      Invalid column name 'Category_CategoryId'.

マッピングの詳細など、さらに情報を投稿する必要がある場合は、お知らせください。これをできるだけ短くしたかったのですが、ツールによって生成されたコードに慣れていない人にとっては、詳細が必要になるかもしれないいくつかのことを省略していることに気付きました.

4

3 に答える 3

6

モデルにナビゲーション プロパティを追加したので、EF はそれをデータベースにマップしようとしています。「コード ファースト」とは、コード モデルがデータベース スキーマを定義することを意味します。

[NotMapped]属性をヘルパー プロパティに追加して、それらを無視するように EF に指示してみてください。

于 2013-01-03T15:55:14.820 に答える
2

DB スキームを自動的に作成し、(DropDatabaseAlways/DropDatabaseIfModelChanges) のような戦略を使用していない場合、つまり、実際にリバース エンジニアリングを行っている場合は、"Category" テーブルに列 "CategoryId" を手動で追加する必要があるようです。

プロパティを操作したくない場合 (つまり、DB で)、Data Annotation[NotMapped]または Fluent APIを使用できます。modelBuilder.Entity<Category>().Ignore(x=> x.CategoryId)

最後に、問題がマッピングにある可能性があります。データ注釈または Fluent API のどちらを使用しているかはわかりませんが、EF は自動的にいくつかの db 列 (モデルから派生した論理動作) を探し、それを見つけることができません。この場合、マッピングを修正することをお勧めします。

于 2013-01-03T16:09:42.187 に答える
0

OPはすでに問題を解決しましたが、別の解決策で同様のエラーが発生しました。したがって、他の人がそれを必要とする場合に備えて、ここにあります:

エンティティ間の 0..1 関係の片側にナビゲーション プロパティがありませんでした。欠落していたエンティティに適切なナビゲーション プロパティを追加すると、問題は解決しました。

もう少し詳しく: FK を使用して 0..1 の関係を持つ 2 つのエンティティがありました。エンティティ A (親) には、エンティティ B (子) への FK がありました。子エンティティ B にはエンティティ A へのナビゲーション プロパティがありましたが、A にはエンティティ B へのナビゲーション プロパティがありませんでした。これを追加した後、問題は解決しました。

于 2013-04-05T01:14:24.483 に答える