Модель структурирована иначе, чем таблица, проблема с обновлением базы данных, потому что типы не совпадают - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь обернуть свой мозг вокруг использования моделей в 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 (и другие свойства), что и тот, что был отправлен обратно в модель, и обновите его значения в таблице. Мне кажется, я просто запутался в том, как я использую любую свою модель.Мое лямбда-выражение.

1 Ответ

0 голосов
/ 15 октября 2018

Мне было ясно, что я возвращаю неправильный тип, я просто не понимаю, какой был правильный тип.В моей модели уже заполнен класс NBTC, это то, что было отправлено обратно в контроллер вместе с другими частями модели, поэтому я не хочу создавать новую переменную типа NBTC.Поскольку я хочу извлечь запись из базы данных и сохранить ее в моей переменной, тип возвращаемого значения должен быть класса базы данных, в данном случае это класс SharingPermission.Новое лямбда-выражение:

SharingPermission nbtc = db.SharingPermissions.SingleOrDefault( SharingPermission => SharingPermission.FocalRefID == refID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...