代码之家  ›  专栏  ›  技术社区  ›  MKF

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

  •  0
  • MKF  · 技术社区  · 6 年前

    我试着在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在 CIP_FA_Centroid 与属性相对应的字段 NBTC_FA_Centroid

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

    SharingPermission (数据库表)以键入 NBTC公司

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   MKF    6 年前

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

    SharingPermission nbtc = db.SharingPermissions.SingleOrDefault( SharingPermission => SharingPermission.FocalRefID == refID);
    
    推荐文章