我有一个模型课:
public class UserProfile
{
public string UserID { get; set; }
public string Name{ get; set; }
public ICollection<AddressMaster> AddressMaster { get; set; }
}
上面的类与下面给出的AddressMaster模型类具有一对多的关系:
public class AddressMaster
{
public string AddrID{ get; set; }
public string AddressLine1{ get; set; }
public UserProfile UserProfile { get; set; }
public TheatreLocation TheatreLocation { get; set; }
}
问题是,还有另一种模型与addressmaster具有一对多关系,即:
public class TheatreLocation
{
public string LocationID { get; set; }
public string Name{ get; set; }
public ICollection<AddressMaster> AddressMaster { get; set; }
}
因此,除了在地址主控器上没有外键之外,我们如何在地址主控器和用户配置文件之间创建一个中间表,以及在地址主控器和剧院之间的另一个此类表?
还是我把整个概念弄错了?
谢谢。
答案 0 :(得分:1)
您的表定义可能会变成这样:
UserProfile
UserId PK
Theather
TheatreId PK
Address
AddrID PK
AddressLine1
UserAddress
UserId PK & FK
AddressId FK
TheatreAddress
TheatreID PK & FK
AddressId FK
这只是很好的规范化-即您在数据库中有一个通用的“地址”表。几个实体可能有一个地址,并且与该地址具有一对多关系或多对多关系,但是一个特定的地址只需要记录一次。
例如仅在UserId上的中间表上的PK可以确保这是一个多对多。
答案 1 :(得分:1)
因此,除了在addressmaster上没有外键之外,我们怎么能 地址管理员和用户个人资料之间的中间表& 另一个这样的表黑白地址主和剧院?
如果您不想设置任何外键并添加中间表。设计如下:
public class UserProfile
{
[Key]
public string UserID { get; set; }
public string Name { get; set; }
}
public class AddressMaster
{
[Key]
public string AddrID { get; set; }
public string AddressLine1 { get; set; }
}
public class UserAddress
{
[Key]
public string AddrID { get; set; }
public string UserID { get; set; }
}
将主键添加到中间表UserAddress
。AddrId
只能有一个值,但是UserID
可以有很多值,就像one-to-many
的关系。
还是我把整个概念弄错了?
没错。像您一样使用导航属性也不错。