如何删除ASP.Net MVC索引视图表中的重复条目

时间:2019-03-25 18:52:09

标签: c# sql-server razor asp.net-mvc-5

我有以下情况:

我有一个Contact,其属性为FirstNameLastName。一个联系人可以有多个PhoneNumbers和多个EmailAddresses。我已将它们确定为具有共同关系的3个实体。请参阅下面的表定义:

create table Contact
(
    ID int primary key not null identity(1,1),
    FirstName nvarchar(40),
    LastName nvarchar(40)
);
go

create table ContactNumber
(
    ID int primary key not null identity(1,1),
    PhoneNumber nvarchar(40)
);
go

create table EmailAddress
(
    ID int primary key not null identity(1,1),
    EmailAddress nvarchar(40)
);
go

create table UserContact
(
    ID int primary key not null identity(1,1),
    ContactID int foreign key references Contact(ID),
    ContactNumberID int foreign key references ContactNumber(ID),
    EmailID int foreign key references EmailAddress(ID)
);
go

现在,我需要在我选择的Web应用程序中显示这些用户。我为视图选择了带有Razor引擎的C#MVC。我正在努力在表中对此视图建模。该表需要操作链接来编辑,删除,创建新联系人并查看该联系人的详细信息。我希望结果集显示如下:

FirstName | LastName | ContactNumber | EmailAddress
-------------------------------------------------------
James     | Smith    | 082 111 5454  | james@domain1.com | edit | details | delete
                                     | james@domain2.com
                                     | james@domain3.com
--------------------------------------------------------
Luther    | Arnolds  | 082 111 5455  | luther@domain1.com | edit | details | delete
                     | 082 111 5456  |
--------------------------------------------------------
Sarah     | Jones    | 082 111 5510  |  sarah@domain.com  | edit | details | delete
---------------------------------------------------------
          |          |               |

但是,我只是找不到写方法来转换ContactNumberID中的EmailIDUserContact列以从其对应的桥接表进行映射。我现在面临的问题是它正在复制UserContact中的记录,从而使该表包含许多冗余数据。例如,James Smith的记录将重复3次。如何在ASP.Net MVC中实现这一目标而又不重复任何条目?

1 个答案:

答案 0 :(得分:1)

我会做这样的事情。请注意,我稍微更改了列名。有一个名为ID的列是我的宠儿。无论它位于哪个表中,它都是一个ContactID(或其他形式)。我也真的不喜欢为相关表中的同一数据更改列名。

UPDATE
      messages as m
    SET
      read_by_user_ids = CASE
        WHEN cu.read_up_to >= m.created_at THEN array_append(
          COALESCE(m.read_by_user_ids, '{}'),
          cu.user_id
        ) ELSE m.read_by_user_ids
      END
    FROM
      conversations_users cu
    WHERE
      cu.conversation_id = m.thread_id;