我有以下课程
public Building()
{
public int Id{Get; Set;};
public ICollection Bars{Get; Set;};
}
public Room()
{
public int Id{Get; Set;};
public int BuildingId{Get; Set;};
public Building Building{Get; Set;};
public string Name{Get; Set;);
}
Run Code Online (Sandbox Code Playgroud)
我希望建筑物内的每个房间都有一个唯一的名称。但我不能使 Name 属性唯一,因为不同的建筑物可能具有相同的房间名称
Room Table
Id BuildingId Name
1 1 Kitchen
2 2 Kitchen //Should be allowed as different building
3 1 Kitchen //Should not be allowed
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一解决方案是在 BuildingId 和 Name 之间创建一个复合键。
modelBuilder.Entity<Room>().HasKey(r=> new {r.BuildingId, r.Name});
Run Code Online (Sandbox Code Playgroud)
App 中会出现很多取房间的情况,把 Key 保持为一个简单的整数会简单得多。有没有办法让它成为一个独特的复合列而不让它成为关键?
我相信我需要与索引有关,但我可以找到我所追求的工作示例。