我有以下课程
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;);
}
我希望建筑物中的每个房间都有唯一的名称。但是我不能使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
我唯一想到的解决方案是在BuildingId和Name之间建立一个复合键。
modelBuilder.Entity<Room>().HasKey(r=> new {r.BuildingId, r.Name});
获取房间会在App中发生很多,并且将Key保留为简单整数会更加容易。有没有一种方法可以使它成为唯一的复合列而无需使其成为键?
我相信我需要与Index相关,但是我可以找到一个关于事后工作的有效示例。
答案 0 :(得分:1)
在这种情况下,您不必使用复合键,而是可以使组合成为唯一键。您必须使用如下的HasIndex
和IsUnique
方法。
modelBuilder.Entity<Room>(b =>
{
b.HasIndex(e => new { e.BuildingId, e.Name}).IsUnique();
});