4

さて、これは些細なことかもしれませんが、誰かが私に簡単な答えをくれることを願っています。MVCプロジェクトに2つのモデルがあり、一方のモデルにもう一方のモデルのリストが含まれているとします。2つのモデルは次のようになります。

public class Vehicle
{
    [Key]
    public int VehicleId { get; set; }

    public virtual List<Wheel> Wheels { get; set; }
}

public class Wheel
{
    [Key]
    public int WheelId { get; set; }

    [Required]
    public int VehicleId { get; set;}

    [Required]
    public virtual Vehicle { get; set; }
}

これと同じものがありますが、モデルが1つしかない場合を考えてみましょう。最初は、次のようになると思いました。

public class MyClass
{
    [Key]
    public int MyClassId { get; set; }

    public string MyData { get; set; }

    public virtual List<MyClass> MyClasses { get; set; }
}

これはMyClasses、ナビゲーションプロパティとして指定されているという理由だけで私を失望させます。これは、それぞれが親を参照するプロパティと別のプロパティMyClasses[i]を持っている必要があることを意味します。しばらく考えた後、めまいがし始めました。私はこれを正しい方法で行っていますか?MyClassMyclassIdMyClass

4

2 に答える 2

1

インスタンスのMyClass操作:

public class Class
{
  [Key]
  public int ClassId { get; set; }
  public string Data { get; set; }
}

public class Classes
{
  public virtual List<Class> Classes { get; set; }
}

ビューで `@model .ViewModels.Classes. 想像以上に簡単にはなりませんし、頭がくらくらすることもありません。

要するに、循環参照を行わないでください。1 つのクラスに別の名前を付けて円を壊すことで、ビュー内のモデルが何を探すべきか、何を処理するべきかを認識できるようになります。もちろん、円で作業することもできます。問題は、維持するのが悪夢だということです。自分に好意を持って、あなたの人生を楽にしてください。

アップデート

public class MyClasses
{
  public List<Classes> OtherClasses;
}

お役に立てれば。

于 2012-08-28T01:54:08.687 に答える
0

これは、適切なSQLデータベースを生成するための正しいアプローチです。

public class MyClass
{
    [Key]
    public int MyClassId { get; set; }

    public string Data { get; set; }

    public virtual Classes Classes { get; set; }
}

public class Classes
{
    [Key]
    public int ClassesId { get; set; }

    [Required]
    public int MyClassId { get; set; }

    public List<MyClass> Classes { get; set; }

    [Required]
    public virtual MyClass MyClass { get; set; }
}
于 2012-08-29T20:38:11.383 に答える