我正在努力使自己的头脑围绕MVC中模型的使用。由于需要在视图中使用模型,因此我设置的模型与与其协调的数据库表不同。但是,当用户从视图提交表单(可能提交更改的值)时,我需要使用这些新值来更新数据库。我遇到的问题是,当我使用lambda表达式时,无法获取与表匹配的数据类型。希望这将有助于更清楚地解释我的意思:
模型
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的记录将在{ {1}}字段对应于属性CIP_FA_Centroid
)
当我到达控制器以将更改保存到数据库时,我正在使用这样的lambda表达式(我将添加更多属性以使其仅提取一条记录,因为如表所示,多条记录在表中具有相同的FocalRefID上方):
NBTC_FA_Centroid
不幸的是,这无法正常工作,因为它无法将类型NBTC nbtc = db.SharingPermissions.SingleOrDefault( NBTC => NBTC.FocalRefID == refID);
(数据库表)转换为类型SharingPermission
不能将类型'FocalAreaCounts.Models.SharingPermission'隐式转换为'FocalAreaCounts.Models.NBTC'
我要做的是使用与模型中发送回的记录相同的FocalRefID(和其他属性)提取记录,并更新表中的值。我只是对我如何使用模型或lambda表达式感到困惑。
答案 0 :(得分:0)
对我来说很明显,我返回的是错误的类型,只是我不明白什么是正确的类型。我的模型已经填充了NBTC类,这是与模型的其他部分一起发送回控制器的,因此我不想创建新的NBTC类型变量。由于我想从数据库中提取一条记录并将其存储在我的变量中,因此返回类型应该是数据库类的,在这种情况下,该类型是SharingPermission类。新的lambda表达式:
right([your column], [result from above] - 1)