我有两个对象表和一个连接表,如下所示:
public class Item
{
public int ItemID
public ICollection<ItemAttribute> ItemAttributes
}
public class Attribute
{
public int AttributeID
public ICollection<ItemAttribute> ItemAttributes
public AttributeType Type
public int ValueID
}
public class ItemAttribute
{
public int ItemID;
public Item Item
public int AttributeID;
public Attribute Attribute
public int? Order
}
在我的OnCreateModelBuilding函数中,我具有以下内容:
modelBuilder.Entity<Item>()
.HasKey(i => i.ItemID);
modelBuilder.Entity<Attribute>()
.HasKey(a => a.AttributeID);
modelBuilder.Entity<ItemAttribute>()
.HasKey(ia => new { ia.ItemID, ia.AttributeID });
modelBuilder.Entity<ItemAttribute>()
.HasOne<Item>(ia => ia.Item)
.WithMany(i => i.ItemAttributes)
.HasForeignKey(ia => ia.ItemID);
modelBuilder.Entity<ItemAttribute>()
.HasOne<Attribute>(ia => ia.Attribute)
.WithMany(a => a.ItemAttributes)
.HasForeignKey(ia => ia.AttributeID);
虽然我知道示例和教程中看到的大多数联接表都没有Order列,但我希望有一个。这是我要尝试做的一个例子。
想象一下,我保存了一个“班级图片”项目,并且想按顺序(从左到右)列出该图片中的学生。就表格而言,这就是我的想法:
Items
ItemID
1
Attributes
AttributeID Type ValueID
1 Student 1
2 Student 2
3 Student 3
ItemAttribute
ItemID AttributeID Order
1 3 1
1 1 2
1 2 3
在此示例中,将使用ValueID指向从StudentRepository中提取学生信息。理想情况下,我想将属性添加到项,而不是相反。因此,我在Item类中具有以下功能:
public bool AddAttribute(Attribute attribute, int? order)
{
ItemAttribute itemAttribute = new ItemAttribute() { Item = this, Attribute = attribute, Order = order != null ? order : null };
if (ItemAttributes.Contains(itemAttribute))
return false;
ItemAttributes.Add(itemAttribute);
return ItemAttributes.Contains(itemAttribute);
}
这是处理此问题的最佳方法吗?