0

以下に定義する 2 つのデータベース クラスがあります。

 public class TopDate
    {
        [Key]
        public int DateId { get; set; }
        public DateTime Date { get; set; }
    }
 public class TopSong
    {
        [Key]
        public int SongId { get; set; }        
        public string Title { get; set; }
        public int DateId { get; set; }
    }

ここで、DateId は TopSong への外部キーです

これらのデータベース値を作成、削除、または編集できるコントローラーを作成しています。

コントローラー クラスを右クリックしてコントローラーを追加すると、上で定義した 2 つのクラスのうちの 1 つしか選択できません。これら両方のテーブルのデータベース更新を 1 ページで処理する 1 つのコントローラーを作成する方法はありますか?

エラー画像:ここに画像の説明を入力

4

2 に答える 2

1

コントローラーは、ドメイン オブジェクト (つまり、データベースに直接関連付けられているもの) を直接処理するべきではありません。必要なプロパティを含む ViewModel を作成し、サービス レイヤーを使用して ViewModel を設定すると、コントローラーはそれをベースのモデルとして使用します。上記の説明を踏まえると、ViewModel の例は次のようになります。

public class MusicViewModel
{
    public int SongId {get;set;}
    public string Title {get;set;}
    public IEnumerable<DateTime> TopDates {get;set;}
}

このビュー モデルには、特定の曲がトップ ソングであったすべての日付のリストが含まれます。

于 2012-08-29T03:31:47.617 に答える
0

表示するオブジェクト (コード) は、データベース クラス (いわゆるドメイン オブジェクト) です。あなたがしなければならないことは、標準の ASP MVC プラクティスであるビュー モデルを定義することです。特定のビューに合わせて調整され、その特定のビューに関連するデータのみを含むクラスを定義します。したがって、曲を作成するビューのビューモデル、それを更新する別のビューモデルなどがあります。

実際にあなたが説明している状況は、ビューモデルを使用する古典的な状況です。ただし、ビューでドメイン オブジェクトを使用することは、本当に悪い習慣であり、対処したい以上の問題が発生する傾向があります。

お役に立てれば。

于 2012-08-29T05:03:53.137 に答える