Я пытаюсь обернуть свой мозг вокруг использования моделей в MVC.Моя модель настроена иначе, чем таблица базы данных, с которой она координируется, из-за того, как мне нужно использовать модель в представлении.Однако, когда пользователь отправляет форму из представления, потенциально отправляя измененные значения, мне нужно обновить базу данных этими новыми значениями.Проблема, с которой я сталкиваюсь, заключается в том, что когда я использовал лямбда-выражение, я не могу заставить типы данных соответствовать моей таблице.Надеюсь, это поможет более четко объяснить, что я имею в виду:
Модель
public class DataSharingModels
{
public string ReferenceID { get; set; }
public NBTC NBTCGroup { get; set; }
public Contractors ContractorsGroup { get; set; }
public Coordinators CoordinatorsGroup { get; set; }
public NGO NGOGroup { get; set; }
public Public PublicGroup { get; set; }
public SelectList FA_RA_List { get; set; }
}
public class NBTC
{
public Boolean NBTC_FA_Centroid { get; set; }
public Boolean NBTC_FA_Bound { get; set; }
public Boolean NBTC_RA_Centroid { get; set; }
public Boolean NBTC_RA_Bound { get; set; }
public Boolean NBTC_Spring_Sum { get; set; }
public Boolean NBTC_Spring_Analysis { get; set; }
public Boolean NBTC_Spring_Locate { get; set; }
public Boolean NBTC_Fall_Sum { get; set; }
public Boolean NBTC_Fall_Analysis { get; set; }
public Boolean NBTC_Fall_Locate { get; set; }
public Boolean NBTC_HabMon_Sum { get; set; }
public Boolean NBTC_HabMon_Analysis { get; set; }
public Boolean NBTC_HabMon_Locate { get; set; }
public Boolean NBTC_HabMgmt_Sum { get; set; }
public Boolean NBTC_HabMgmt_Analysis { get; set; }
public Boolean NBTC_HabMgmt_Locate { get; set; }
public Boolean NBTC_Inventory_Sum { get; set; }
public Boolean NBTC_OpSvy_Sum { get; set; }
public Boolean NBTC_OpSvy_Individ { get; set; }
}
//The NBTC class is essentially repeated four more times for Contractors,
// Coordinators, NGO, and Public. The prefixes are changed
//for the properties that make up those classes.
public class Contractors
{
public Boolean Contractors_FA_Centroid { get; set; }
public Boolean Contractors_FA_Bound { get; set; }
public Boolean Contractors_RA_Centroid { get; set; }
public Boolean Contractors_RA_Bound { get; set; }
public Boolean Contractors_Spring_Sum { get; set; }
public Boolean Contractors_Spring_Analysis { get; set; }
public Boolean Contractors_Spring_Locate { get; set; }
public Boolean Contractors_Fall_Sum { get; set; }
public Boolean Contractors_Fall_Analysis { get; set; }
public Boolean Contractors_Fall_Locate { get; set; }
public Boolean Contractors_HabMon_Sum { get; set; }
public Boolean Contractors_HabMon_Analysis { get; set; }
public Boolean Contractors_HabMon_Locate { get; set; }
public Boolean Contractors_HabMgmt_Sum { get; set; }
public Boolean Contractors_HabMgmt_Analysis { get; set; }
public Boolean Contractors_HabMgmt_Locate { get; set; }
public Boolean Contractors_Inventory_Sum { get; set; }
public Boolean Contractors_OpSvy_Sum { get; set; }
public Boolean Contractors_OpSvy_Individ { get; set; }
}
//And so on and so forth...
В таблице базы данных SQL она структурирована примерно так:
PermissionID | FocalRefID | ShareGroup | StateID | CIP_FA_Centroid | CIP_FA_Boundary | etc...
1 | <guid> | NBTC | NE | Allowed | Allowed
2 |<same guid> |Contractors | NE | Not Allowed | Allowed
3 |<same guid> |Coordinators| NE | Not Allowed | Not Allowed
4 |<same guid> | NGO | NE | Allowed | Allowed
5 |<same guid> | Public | NE | Allowed | Not Allowed
Игнорировать, что guid не является истинным guid в этой таблице (это не первичный ключ) ... В модели свойство ReferenceID
будет иметь значение, представленное в поле FocalRefID
стол.Класс NBTC
имеет все атрибуты, необходимые для выполнения одной записи в базе данных с NBTC
в поле ShareGroup
(поэтому запись с NBTC
ShareGroup будет иметь в поле CIP_FA_Centroid
что-то, что соответствуетсвойство NBTC_FA_Centroid
)
Когда я добираюсь до контроллера, чтобы сохранить изменения в базе данных, я использую лямбда-выражение, подобное этому (я бы добавил больше свойств, чтобы заставить его извлекать только одну запись, так как несколько записей имеюттот же FocalRefID в таблице, как показано выше):
NBTC nbtc = db.SharingPermissions.SingleOrDefault( NBTC => NBTC.FocalRefID == refID);
К сожалению, это не сработает, поскольку не может преобразовать тип SharingPermission
(таблица базы данных) в тип NBTC
Невозможно неявно преобразовать тип 'FocalAreaCounts.Models.SharingPermission' в 'FocalAreaCounts.Models.NBTC'
Что я пытаюсь сделать, это извлечь запись с помощьютот же FocalRefID (и другие свойства), что и тот, что был отправлен обратно в модель, и обновите его значения в таблице. Мне кажется, я просто запутался в том, как я использую любую свою модель.Мое лямбда-выражение.