模型的结构与 table 不同,更新数据库时出现问题,因为类型不同

Model is structured differently than table, problem updating database because types are not the same

我正在努力思考如何在 MVC 中使用模型。由于我需要在视图中使用模型,因此我的模型的设置不同于与之协调的数据库 table。但是,当用户从视图提交表单时,可能会提交更改的值,我需要用这些新值更新数据库。我遇到的问题是当我使用 lambda 表达式时,我无法获得与我的 table 相匹配的数据类型。希望这有助于更清楚地解释我的意思:

型号

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数据库table中,它的结构更像这样:

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

忽略此 table 中的 guid 不是真正的 guid(它不是主键)...在模型中,ReferenceID 属性 将具有值在 table 的 FocalRefID 字段中表示。 class NBTC 具有在 ShareGroup 字段中使用 NBTC 完成数据库中单个记录所需的所有属性(因此具有 NBTC ShareGroup 的记录将在 CIP_FA_Centroid 字段下有对应于 属性 NBTC_FA_Centroid)

的内容

当我到达控制器以保存对数据库的更改时,我正在使用这样的 lambda 表达式(我将添加更多属性以使其仅提取一条记录,因为多个记录在 table 如上所示):

NBTC nbtc = db.SharingPermissions.SingleOrDefault( NBTC => NBTC.FocalRefID == refID);

不幸的是,这行不通,因为它无法将类型 SharingPermission(数据库 table)转换为类型 NBTC

Cannot implicitly convert type 'FocalAreaCounts.Models.SharingPermission' to 'FocalAreaCounts.Models.NBTC'

我想做的是使用与模型中发回的相同的 FocalRefID(和其他属性)提取记录,并在 table 中更新它的值。 我想我只是对如何使用我的模型或我的 lambda 表达式感到困惑。

我很清楚我 return 打错了类型,我只是不明白什么是正确的类型。我的模型已经填充了 NBTC class,这是与模型的其他部分一起发送回控制器的内容,因此我不想创建 NBTC 类型的新变量。因为我想从数据库中提取一条记录并将其存储在我的变量中,所以 return 类型应该是数据库 class 的类型,在本例中是 SharingPermission class。新的 lambda 表达式:

SharingPermission nbtc = db.SharingPermissions.SingleOrDefault( SharingPermission => SharingPermission.FocalRefID == refID);