可编辑的复合主键

时间:2012-05-16 06:43:17

标签: c# asp.net-mvc-3 data-annotations composite-primary-key

我有两个字段用作复合主键,不会自动生成。现在在编辑视图中,这两个字段是只读的,无法编辑它们。那么如何进行编辑......?

型号:

[Key][Column (Order=0)]
[Required]
public string LOV_COLUMN { get; set; }
[Key][Column(Order = 1)]
[Required]   
public string LOV_CODE { get; set; }
[Required]   
public string LOV_DESC{ get; set; }  
public string COLUMN_TYPE { get; set; }
public string LOV_STATUS { get; set; }

控制器:

public ActionResult Edit(string LOV_COLUMN= "", string LOV_CODE="")
{
    return View(dv.LOV.Find(LOV_COLUMN, LOV_CODE) ?? new ADM_LOV_Master());
}

[HttpPost]
public ActionResult Edit(ADM_LOV_Master entity, FormCollection form)
{
    try
    {
        var model = dv.LOV.Find(entity.LOV_COLUMN, entity.LOV_CODE);
        TryUpdateModel<ADM_LOV_Master>(model, form.ToValueProvider());
        dv.Entry<ADM_LOV_Master>(model).State = System.Data.EntityState.Modified;
        dv.SaveChanges();
        return RedirectToAction("Index");                
    }
    catch 
    {               
        return View();
    }
}

Edit View Code as:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>LOV_Master</legend>       

    <table>
    <tr>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_COLUMN)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_COLUMN)
        @Html.ValidationMessageFor(model => model.LOV_COLUMN)
    </div>
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_CODE)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_CODE)
        @Html.ValidationMessageFor(model => model.LOV_CODE)
    </div>
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_DESC)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_DESC)
        @Html.ValidationMessageFor(model => model.LOV_DESC)
    </div>
    </td>
    </tr>
    <tr>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.COLUMN_TYPE)
    </div>
    <div class="editor-field">
        @*@Html.EditorFor(model => model.COLUMN_TYPE)*@
        @Html.RadioButtonFor(model => model.COLUMN_TYPE, "C", new { id = "COLUMN_TYPE_false"})
        <label for="COLUMN_TYPE_true">Character</label>             
        @Html.RadioButtonFor(model => model.COLUMN_TYPE, "N", new { id = "COLUMN_TYPE_true"})
        <label for="COLUMN_TYPE_true">Number</label>                        
        @Html.ValidationMessageFor(model => model.COLUMN_TYPE)            
    </div>        
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_STATUS)
    </div>
    <div class="editor-field">
        @*@Html.EditorFor(model => model.LOV_STATUS)*@
        @Html.RadioButtonFor(model => model.LOV_STATUS, "Y", new { id = "LOV_STATUS_true"})
        <label for="LOV_STATUS_true">Yes</label>                
        @Html.RadioButtonFor(model => model.LOV_STATUS, "N", new { id = "LOV_STATUS_false" })
        <label for="LOV_STATUS_true">No</label>     
        @Html.ValidationMessageFor(model => model.LOV_STATUS)
    </div>
    </td>

    </tr>

</table>

</fieldset>
}

1 个答案:

答案 0 :(得分:3)

主键应该是不可变的,我强烈建议使用ID(int,GU​​ID)作为主键,然后将它们作为具有唯一约束的代理键添加。我之所以这样说是因为如果任何数据在任何其他表格中引用此数据,您将受到约束违规,这对您来说将是一场噩梦。