0

Rate私は2 つの場所を持つことができるクラスを持っています。LocationToLocationFrom。場所は、ページのドロップダウン リストにする必要があります。

私のモデルは次のようになります。

public class Rate
{
    [Key]
    public int Id { get; set; }
    public string RateName { get; set; }
    public int LocationToId { get; set; }
    public int LocationFromId { get; set; }
    public virtual Location LocationTo { get; set; }
    public virtual Location LocationFrom { get; set; }
}

public class Location
{
    [Key]
    public int Id { get; set; }
    public string LocationName { get; set; }
    public virtual ICollection<Rate> Rates { get; set; }
}

ここで私は正しいと思いますか?


これはオーリンですか?public virtual Location LocationTo { get; とは何ですか? 設定; } 行う?

   public class Location
{
    [Key]
    public int Id { get; set; }
    public string LocationName { get; set; }
    [InverseProperty("LocationToId")]
    public virtual ICollection<Rate> ToRates { get; set; }
    [InverseProperty("LocationFromId")]
    public virtual ICollection<Rate> FromRates { get; set; }
}
public class Rate
{
    [Key]
    public int Id { get; set; }
    public string RateName { get; set; }
    public int LocationToId { get; set; }
    public int? LocationFromId { get; set; }
    public virtual Location LocationTo { get; set; }
    public virtual Location LocationFrom { get; set; }
}
public class dc : DbContext
{
    public DbSet<Location> Locations { get; set; }
    public DbSet<Rate> Rates { get; set; }

}
4

1 に答える 1

1

モデルの問題の 1 つは、Rate ごとに 2 つの Location 参照があり、いくつかの属性を追加して EF を少し支援する必要があることです。Rate クラスの外部 ID のデフォルト名は LocationId にする必要がありますが、参照が 2 つあるため、別々の名前を付ける必要があります。それは何も悪いことではありません...

ただし、Location モデルを少し変更する必要があります。

public class Location
{
    [Key]
    public int Id { get; set; }
    public string LocationName { get; set; }
    [InverseProperty("LocationToId")]
    public virtual ICollection<Rate> ToRates { get; set; }
    [InverseProperty("LocationFromId")]
    public virtual ICollection<Rate> FromRates { get; set; }
}

InverseProperty属性を追加することで、EF は Location から Rate への道を見つけることができます。

編集:ドロップダウンリストの例

OK、質問が少し変わりました:-) ドロップダウンリストを追加するには、このように書くことができます。

@model Rate
@Html.DropDownListFor(model => model.LocationFromId, ((IEnumerable<Location>)ViewBag.PossibleLocations).Select(option => new SelectListItem {
    Text = Html.DisplayTextFor(_ => option).ToString(), 
    Value = option.Id.ToString(),
    Selected = (Model != null) && (option.Id == Model.LocationFromId)
}), "Choose...")

これを機能させるには、View に渡す前に、Controller の ViewBag に PossibleLocations という名前の変数を作成する必要があります。

于 2013-06-18T15:22:28.873 に答える