6

Entity Framework (データベースが最初) で、作成されたクラスにいくつかのデータ注釈を追加しようとしています。

一般的に:クラスXを作成しました:

namespace Info
{
    using System;
    using System.Collections.Generic;

    public partial class X
    {
        public string SomeProperty {get; set;}
        ...
    }
}

SomePropertyJSON にシリアル化するときにプロパティを無視したいので、App_Code/Metadataクラス X.cs を作成し、いくつかのメタデータを追加します。

namespace Info
{

    public class XMetaData
    {
        [JsonIgnore]
        public string SomeProperty{get; set;}
    }

     [MetadataType(typeof(XMetaData))]
     public partial class X
     {

     }

}

Info.App_Code.Metadata上記では、名前空間を からに手動で変更Infoして、部分クラスが一致するようにしました。

ただし、Xクラスを使用するすべての場所で警告があります

The type Info.X in '.../Info/App_Code/Metadata/X.cs ' conflicts with the imported type Info.X in '.../Info/X.cs'. Using the type defined in '.../Info/App_Code/Metadata/X.cs '

両方の部分クラスがマージされると予想していましたが、すべてのオカレンスはその空の 1 つの X クラスを参照しています。

私が欠けているものを誰か知っていますか?

4

6 に答える 6

9

同じクラスを参照する複数の部分クラス定義は、すべて 1 つのアセンブリ内に存在する必要があります。上記のコンパイル中の例では、メタデータをクラスに焼き付ける必要があり、コンパイル後、クラスはすべてのパーツで構成される全体になります。部分クラスは、同じクラスの定義を複数のファイルに分割する手段です。

詳細な説明については、こちらを参照してください。ただし、次の点に注意してください。

同じ型の一部であることを意図したすべての部分型定義は、同じアセンブリおよび同じモジュール (.exe または .dll ファイル) で定義する必要があります。部分的な定義は、複数のモジュールにまたがることはできません。

このリンクはここでそれを説明しています

一般に、ASP.NET はアプリケーション ディレクトリ (App_Code など) ごとにアセンブリを作成し、メイン ディレクトリに対してアセンブリを 1 つ作成します。

あなたの場合、部分クラスは同じプロジェクト同じ名前空間にありますが、同じアセンブリにコンパイルされていません。

于 2013-07-11T09:29:32.700 に答える
7

開発しているアプリケーションの種類によっては、コードを App_Code フォルダーに配置するのが間違っている可能性があります。これは、コンテンツに特定の影響があるためです。この他の質問を参照してください。

ソース ファイルを App_Code から移動してみて、[プロパティ] ウィンドウで [ビルド アクション] が [コンパイル済み] になっていることを確認してください。

于 2013-07-08T21:17:47.657 に答える
0

プロジェクトの bin フォルダーを削除し、プロジェクトをクリーンアップして再構築します

于 2016-08-03T15:21:09.863 に答える