2012-05-16 10 views
2

У меня есть два поля, которые используются в качестве составного первичного ключа, которые не генерируются автоматически. Теперь в окне «Редактирование» эти два поля доступны только для чтения, не в состоянии их редактировать. Итак, как можно сделать редактирование ...?редактируемый составной первичный ключ

Модель:

[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> 
} 
+0

показать код представления, проще разместить исправление таким образом. – linkerro

+0

Что значит «изменить нельзя»? Я пробовал это с помощью @ Html.EditorForModel, и я могу вносить изменения в свойства ключа в представлении. – McGarnagle

+0

отправил код для редактирования. – user13

ответ

3

Первичные ключи должны быть неизменны, я бы настоятельно рекомендуем, используя идентификатор (интермедиат, GUID) в качестве первичного ключа, который а затем добавьте их в качестве суррогатного ключа с уникальным ограничением. Я говорю это, потому что, если какие-либо данные относятся к этим данным в любой другой таблице, вы получите нарушения ограничений, и это будет для вас кошмаром.

Смежные вопросы