实体框架关联的优先级/订单int列

时间:2013-02-25 11:15:25

标签: sql-server entity-framework database-design

我在Entity Framework中有一个关联,但我需要为它添加一个属性/属性。无论如何我在实体框架中执行此操作存在问题(我更喜欢将其保留为关联,但我被迫将其更改为实体以向其添加属性),但在此特定情况下,我想知道是否有更好的方法来做到这一点。

关联表非常简单:

CREATE TABLE EntityA_EntityB (
   aId uniqueidentifier,
   bId uniqueidentifier
)

客户想要一种方法来优先或订购相关的EntityBs。我认为最好的方法是在此表中添加一个order column(int),结果如下所示:

CREATE TABLE EntityA_EntityB (
   aId uniqueidentifier,
   bId uniqueidentifier,
   order int
)

在这种情况下,所有三列都将构成主键。这似乎没问题,但它为使用该系统的任何代码增加了相当多的复杂性,因为我不得不在EntityA中添加相关的EntityB,而是在EntityA.EntityBs集合中找到最大的“order”数字,并增加它以添加新的关联。

我可以使订单列成为标识,但无论aId或bId的值是什么,这都会不断增加订单列。当插入一个全新的aId和bId组合时,我想要一个插入0的订单。

有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果订单整数不必是连续的顺序,则可以将订单整数作为主键。

CREATE TABLE EntityA_EntityB (
   order autoincrementing int
   aId uniqueidentifier,
   bId uniqueidentifier,
)  

您(aId,bId,order)上有一个唯一索引,而(bId,aId,order)上有另一个唯一索引。

您只需添加带有Id和bId的行,数据库将处理顺序整数。