1

私は次のクラスを持っています:

public class State
{
    public long Id                    { get; set; }
    public string Name                { get; set; }
    public string Abbreviation        { get; set; }

    // Navigation Properties
    public virtual Country Country    { get; set; }
}

public class School
{
    public long Id                    { get; set; }
    public string Name                { get; set; }
    public string Abbreviation        { get; set; }

    // Navigation Properties
    public virtual State State        { get; set; }
}

私のSQL Serverの次のデータ

| School|             |               |
|  Id   | Name        |    State      |
|  1    | UCLA        |      1        |
+-------+-------------+---------------+
| State |             |               |
|  Id   | Name        | Abbreviation  |
|  1    | California  |      CA       |

Web API を使用して、HTTP POST 動詞を使用して学校のインスタンスを作成する Rest コントローラーを作成しようとしています。

public HttpResponseMessage<School> Post( School school )
{
    SchoolService.CreateSchool( school );
    var response = new HttpResponseMessage<School>( school, HttpStatusCode.Created );
    string uri = Url.Route( null, new { id = school.Id } );

    response.Headers.Location = new Uri( Request.RequestUri, uri );
    return response;
}

Web API は、School クラスの Name プロパティと Abbreviation プロパティを Web フォームから適切にバインドし、コントローラーで POST メソッドを呼び出しますが、State クラスをどうするかわかりません。それを設定する方法がよくわかりません。State クラスにバインドされたドロップダウンが必要です。School の作成を送信すると、既存のデータから正しい州が新しい学校インスタンスに割り当てられます。

4

2 に答える 2

1

まず、ドメイン モデルの設計が少し荒いです。SchoolテーブルにはFKtoテーブルが必要であり、 POCOStateクラス内にもそれが必要です。

public class School
{
    public long Id                    { get; set; }
    public long StateId               { get; set; }
    public string Name                { get; set; }
    public string Abbreviation        { get; set; }

    // Navigation Properties
    public virtual State State        { get; set; }
}

次に、以下のようなフォーム フィールドが必要です。

<select id="StateId" name="StateId">
    <option value="">Select a State</option>
    <option value="310">CA</option>
    <option value="311">NY</option>
</select>
于 2012-04-04T08:37:36.550 に答える