Sql server 表外键/与自身的关联?

Sql server 表外键/与自身的关联?,sql-server,entity-framework,entity,entity-relationship,ado.net-entity-data-model,Sql Server,Entity Framework,Entity,Entity Relationship,Ado.net Entity Data Model,我有一张桌子,上面有一家商店的存货,看起来像这样 InventoryId int ParentId int ShortDesc int ... [other product data] ... 表中将存在父ID为-1的TShirt。大小和颜色的任何变化都将与ParentID字段中的原始父InventoryID存在同一个表中 乙二醇 我是否可以指定某种外键或关联,当我将此DB与实体框架一起使用时,我可以在此实体上拥有一个导航属性,该属性将列出一个库存实体的所有子库存?

我有一张桌子,上面有一家商店的存货,看起来像这样

InventoryId    int
ParentId       int
ShortDesc      int
...
[other product data]
...
表中将存在父ID为-1的TShirt。大小和颜色的任何变化都将与ParentID字段中的原始父InventoryID存在同一个表中

乙二醇


我是否可以指定某种外键或关联,当我将此DB与实体框架一起使用时,我可以在此实体上拥有一个导航属性,该属性将列出一个库存实体的所有子库存?

是的,这很好。对于一个真实的示例,使用默认设置创建Northwind数据库的模型,并查看员工-主管关系。实体框架不会自动获得Supervisor属性名称权限,但关联本身可以工作,您可以手动重命名该属性


关于你的具体例子,我怀疑
-1
。如果这是真实库存记录的真实主键,则可以。如果它是一个表示没有记录的神奇值,那么要么使用NULL,要么将其设置为真实记录。为了让实体框架识别这种关系,您需要创建一个真正的数据库外键,因此所有值实际上都必须引用记录。

或者,您可以将ParentID放入另一个表中,这样您就不必为它发明一个幻数。在我看来,可以为空的外键是最好避免的。但在我看来,这也是我从公司得到的表结构。不过还是要谢谢你:-)
InventoryID   |ParentID   |ShortDesc
----------------------------------------------------    
111            -1          Skull TShirt
112            111         Skull TShirt Black Small
113            111         Skull TShirt Black Medium
114            111         Skull TShirt Black Large
115            111         Skull TShirt White Small