从多个屏幕更新单表信息而不依赖主键?

问题描述 投票:0回答:2

我有一个包含作业许可证信息的表,只有许可证ID,许可证名称。例如Id1 - 许可证1,Id2 - 许可证2等

现在,我有一个名为Jobs的表,其中包含作业信息,其中包含许可证1和许可证2的日期和许可证号,例如

JobIdJobNameJobTypeLicense1DateLicense1NoLicense2DateLicense2No等。

我有第三个屏幕,我用它来跟进License1License2。当我收到License1时,我更新了乔布斯表中的License1信息以及License2的信息。

目前,我正在使用手动方式更新Jobs表。以下是我的代码:

public ActionResult Received(int LicenseId, string Date, string License)
{   
    // LicenseId is the Primary Key in License Tables.

    if (LicenseId == 1)
    {
        // Update License 1 Information of Jobs Table
    }
    else if(LicenseId == 2)
    {
        // Update License 2 Information of Jobs Table
    }
}

这个工作正常。但问题是LicenseId是License表的关键。如果用户认为Id1License2Id2License1那么这将是一个问题。

在这种情况下,如果用户收到许可证2,它将更新Jobs表的许可证1信息,因为手动配置了Id 1表示更新作业表的许可证1信息。我怎样才能让它变得动态?

更新:让我更改方案以简化。我有一个表保存许可证和第二个表保存作业和第三个表是保存许可证ID和作业ID的桥梁。现在,我有详细信息屏幕,有3个标签。如果许可证是许可证1,我想填写第一个标签,如果是许可证2,我想填写第二个标签。如果是许可证3,我想填写第三个。在许可证表格中,许可证1可以是1,2或3.我不能说如果Id是1则填写第一个标签。我知道我应该循环。假设,我不想那么我怎么能实现它。

c# asp.net-mvc logic structure
2个回答
0
投票

也许它会有用吗?您还可以将currentLicense与“否”和“日期”等连接起来。

public ActionResult Received(int LicenseId, string Date, string License)
{   
   string currentLicense = string.Concat("License", LicenseId);
   //update for currentLicense
}

0
投票

在你的表结构中,JobslicenseIds的直接字段。所以将来当你有新的licenseId然后你需要改变Jobs表为licenseId添加更多字段

而你的问题,表明一个job可以有多个licenseId

如果可能更改表结构,我建议Jobs表应该是单独的表,你需要有LicenseJob的联结表。

乔布斯表专栏qazxsw poi,qazxsw poi,qazxsw poi ......

LicenseJobs(联结表)列

IdJobNameJobType

这样您就不必担心licenseId,只需为licenseId和JobId调用数据库更新。

在此之后,您还需要将JobId传递给数据库,因此需要修改Action

JobId

编辑 - -

在新方案中,它显示您的UI逻辑依赖于文本“License1”或“License2”。因此Id和Text必须在许可证表中是唯一的。因此,您需要在代码中使用LicenseIdLicenseDate,这些内容与public ActionResult Received(int jobId, int LicenseId, string Date, string License) { } 表中的Enum相同。那么你总是可以首先查询string表以获得许可证的ID,然后根据LicenseName获取/更新其他详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.