2016-06-23 19 views
1

Entity Framework 6のMVC 5プロジェクトでVisual Studio 2013を使用して、一部のモデルをプロジェクトに追加するために、「ADOエンティティデータモデル」(データベースのコードファースト)を使用しました。この場合、テーブルには関係があります。「CA2214」と「CA2227」のコード警告を解決するには、どのようにモデルをリファクタリングできますか?

モデルウィザードでアプリケーションにコンテキスト&を追加したとき、セカンダリテーブルのコンストラクタでこれらの警告属性が見えました。ここに一つの例があります。

私の質問は、警告がなくなるようにコードをリファクタリングする方法があるかどうかです。これは、Entity Frameworkがデータベースの最初のSQL Serverの関係を理解するために無視することを学ぶものですか?

public partial class StudentList 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
      "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public StudentList() 
    { 
     CreditSlipLogs = new HashSet<CreditSlipLog>(); 
    } 

    // ... code 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
      "CA2227:CollectionPropertiesShouldBeReadOnly")] 

    public virtual ICollection<CreditSlipLog> CreditSlipLogs { get; set; } 

    } 
} 

私はCA2214CA2227に関するガイダンスについては、MSDNに見えました。間違いなく間違いありませんが、データモデルウィザードで作成時にこれを解決する方法についての指示はありませんでした。

+0

エンティティを参照するナビゲーションプロパティを初期化するため、この属性が追加されています。このエンティティはまだ初期化されていない可能性があります。次にそれを新しい空のオブジェクトに設定します。 Gert Arnoldのこの質問に対する答えを見てください:http://stackoverflow.com/questions/20757594/ef-codefirst-should-i-initialize-navigation-properties – ghg565

+0

おっと...私はそれを読んでいます – ghg565

+0

私はリンクを読んでいます。私はもっ​​と混乱しているだけです。 –

答えて

2

これらは警告ではなく、にコードに追加された属性であり、ビルドの警告を防止します。 Details for SuppressMessageAttribute

生成されたコードは、EFがレイジーローディングを処理する方法のためにこれらの警告を引き起こすため、この属性をクラステンプレートに追加してビルド警告を受け取らないようにしました。

関連する問題