实体框架中两个字段的外键

时间:2017-11-15 17:24:32

标签: c# sql-server database entity-framework foreign-keys

我有一张桌子,如:

CREATE TABLE Item (
    Id INTEGER NOT NULL PRIMARY KEY IDENTITY(1, 1),
    Uid VARCHAR,
    Version INTEGER NOT NULL UNIQUE
    ...
);

' Uid is a GUID

整个想法是对项目进行版本控制。如果用户想要编辑非草稿项目,他只能使用其最新版本进行编辑,在这种情况下,对象被深度克隆,用户可以使用递增版本对其克隆进行处理。

有一种方法可以只选择最新的项目,例如:

SELECT i.* FROM Item AS i
LEFT JOIN Item AS i1 ON i1.Version > i.Version AND i1.Uid = i.Uid
WHERE i1.Id IS NULL

这在EF中很难实现(即使我这样做,它仍然会比其他解决方案更复杂),所以我计划创建一个只包含最新版本项目的表格,例如:

CREATE TABLE NewestItems (
    Uid VARCHAR NOT NULL
    Version INTEGER NOT NULL );

跟踪最新版本非常简单,因为只有一次,当它发生变化时 - 当用户提交草稿时。但是,我想在数据库中签订合同以确保NewestItems指向实际项目(我确保这些是最新的项目)。

在SQL中,我从pair:Uid和Version创建一个密钥,然后在NewestItems中创建外键。但我先设计数据库代码,我不知道,我该怎么做。

所以问题:如何定义(代码优先)一个由两个字段对组成的密钥,然后是该密钥的外键?

此外:有没有办法从Item创建导航属性到NewestItem(或其他方式),这样我可以轻松选择最新的项目?

0 个答案:

没有答案