0

私は EntityFramework バージョン 4.4 を最初にコードで使用しており、別のプロジェクト (MyApp.DataModel) でデータ モデルを作成しました。私は Silverlight アプリケーションを構築しているので、WCF RIA サービスを使用しています。ria サービスに必要なコードは、別のプロジェクト (MyApp.Services) にあります。このプロジェクトには MyApp.DataModel への参照があります。

データ モデルの例:

   [Column("Remaining")]
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public virtual decimal? Remaining
    {
       //
    }

MyApp.Services をビルドすると、エラーが発生します

「System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute」属性が重複しています

実際、生成されたコードには 2 つの属性があります。

[System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]
[System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]

DatabaseGenerated を削除すると、挿入時にエラーが発生します The column "Remaining" cannot be modified because it is a complex column or is the result of a UNION operator.

この問題を解決する理由と方法はありますか?

4

2 に答える 2

0

ここのドキュメントを理解する限り: http://msdn.microsoft.com/en-us/data/gg193958.aspxは、Key既にデフォルトで に設定されてDatabaseGeneratedOption.Identityいるため、DatabaseGenerated を個別に追加する必要はありません。

DatabaseGeneratedの下の部分からの抜粋:

キー プロパティは、データベースの ID キーになります。これは、DatabaseGenerated を DatabaseGenerationOption.Identity に設定するのと同じです。ID キーにしたくない場合は、値を DatabaseGenerationOption.None に設定できます。

正直なところ、私はこれをテストしていませんが、 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] を削除した後、生成されたコードに他の属性がまだ残っていることを確認できますか?

于 2012-06-22T12:42:32.690 に答える
0

プロパティを DatabaseGeneratedOption.Identity としてマークすると、EF はこれがキー属性であることを認識します。実際には、属性 (Key または DatabaseGeneratedOption.Identity) を配置しない場合、EF は、プロパティが 'ID' で終わるため、これが id であると想定し、データベースに自動インクリメント フィールドを作成します。DataAnnotations は、多くの場合 (あなたの場合のように) オプションです。また、このプロパティはプリミティブ型であるため、仮想としてマークする必要はありません。他のクラスを関連付けるためだけに virtual を使用します (遅延ロード)。

于 2012-06-22T13:30:31.520 に答える