【发布时间】:2019-08-16 02:22:44
【问题描述】:
我有以下场景:
我有一个Contact,其属性为FirstName 和LastName。一个联系人可以有多个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 和EmailID 列从UserContact 转换为从它们相应的桥接表映射的写入方法。我现在面临的问题是它正在复制UserContact 中的记录,从而使表包含大量冗余数据。例如,James Smith 的记录将重复 3 次。如何在没有任何重复条目的情况下在 ASP.Net MVC 中实现这一点?
【问题讨论】:
-
一个电子邮件地址或电话号码可以被多个联系人使用吗?我怀疑不是。我会将 ContactID 作为外键放在 EmailAddress 和 PhoneNumber 表中,然后删除 UserContact 表。你这里没有多对多。您有两个不同的一对多关系。
-
@SeanLange 好的,那么我将如何将关系映射到
Contact?因为它拒绝我在EmailAddress和ContactNumber表上添加引用ContactID的复合主键。
标签: c# sql-server razor asp.net-mvc-5