ASP.NET MVC - Внешний ключ / Parent-Child и редактирование записей - PullRequest
0 голосов
/ 23 августа 2011

У меня есть несколько классов, которые имеют отношение к другим классам для таких свойств, как Местоположение, Валюта и т. Д. Возьмем следующий пример:

Public Class Transaction
     Public Property ID As Integer
     Public Property Description As String
     Public Property Quantity As Integer
     Public Property SaleAmount As Double
     Public Overridable Property Currency As Currency
 End Class

 Public Class Currency
     Public Property ID As String
     Public Property Description As String
     Public Property Symbol As String
     Public Property SymbolImage As String
 End Class

Я добавляю свои валюты, когда инициализирую приложение для первого использования. При добавлении транзакции у меня есть выпадающий список для выбора валюты. У меня нет проблем с сохранением транзакции в БД, а также сохраняется идентификатор валюты.

Когда я редактирую транзакцию и пытаюсь изменить валюту, я не могу ее сохранить, чтобы сохранить обратно в БД.

 <HttpPost()>
    Function Edit(transaction As Transaction) As ActionResult
        transaction.Currency = db.Currencies.Find(transaction.Currency.ID)
        Debug.Print("Currency: " & transaction.Currency.ID)
        If ModelState.IsValid Then
            db.Entry(transaction).State = EntityState.Modified
            db.SaveChanges()
            Return RedirectToAction("Index")
        End If

        Return View(transaction)
    End Function

Когда я выполняю debug.print указанным выше способом post, валюта правильно отображается как измененная валюта, но идентификатор валюты в записи транзакции в БД не обновляется.

Я немного искал и читал и не нашел много / ничего. Я попытался добавить эту строку в метод post, но он все равно не сохранил изменения:

db.Entry(transaction.Currency).State = EntityState.Modified

Я в тупике и буду признателен за любую помощь!

1 Ответ

0 голосов
/ 25 августа 2011

Итак, вот лучшее решение, которое я смог найти.Мне было бы интересно услышать другие способы достижения того же результата.Другие методы, которые я нашел, намного сложнее, чем этот.

Public Class Transaction
    Public Property ID As Integer
    Public Property Description As String
    Public Property Quantity As Integer
    Public Property SaleAmount As Double
    Public Property Name As String

    Public Property CurrencyID() As String
    <ForeignKey("CurrencyID")>
    Public Overridable Property Currency() As Currency
End Class

Я настроил представление Edit с выпадающим списком, содержащим список валют и скрытое поле для хранения CurrencyID.Сообщение для редактирования выглядит так:

<HttpPost()>
Function Edit(transaction As Transaction) As ActionResult
    If ModelState.IsValid Then
        db.Entry(transaction).State = EntityState.Modified
        db.SaveChanges()
        Return RedirectToAction("Index")
    End If

    Return View(transaction)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...