c# - 实体框架的依赖增量主键
问题描述
我第一次使用 C#、Entity Framework 6.1.3 代码优先、SQL Server,并且在创建依赖的自动增量键时遇到了问题。
我有这个:
class One
{
[Key]
[Required]
string exampleKey { get; set; }
string otherProperty { get; set; }
}
class Two
{
[Required]
[Key]
[Column(Order = 0 )]
public string exampleKey { get; set; }
[ForeignKey("exampleKey")]
public virtual One one { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
[Required]
public long Version { get; set; }
public string otherProperty { get; set; }
}
当您插入数据时,我对Version
类的属性感兴趣,Two
它使 id 像
班级One
|exampleKey|otherProperty|
|"test" |"random data"|
|"test2" |"more random"|
班级Two
|exampleKey|Version|otherProperty|
|"test" |1 |"random data"|
|"test" |2 |"more random"|
|"test2" |3 |"random data"|
|"test2" |4 |"more random"|
但我正在寻找这样的东西
|exampleKey|Version|otherProperty|
|"test" |1 |"random data"|
|"test" |2 |"more random"|
|"test2" |1 |"random data"|
|"test2" |2 |"more random"|
我很久以前就在寻找这个问题的解决方案,有可能吗?
太感谢了,太感谢了!
解决方案
不容易,不。但是您可以通过日期戳或标识列得出最新的。然后,每当您检索数据时,只需获取具有最新日期/身份值的行。
您还可以编写一个视图来显示我刚才提到的行为。
像这样的东西:
假数据
if object_id('dbo.Data') is not null drop table dbo.Data
create table dbo.Data
(
RID int identity(1,1) primary key clustered,
ExampleKey varchar(10),
OtherProperty varchar(100)
)
-- initial insert
insert into dbo.Data (ExampleKey, OtherProperty)
values ('test', 'Random data'), ('test2', 'more random')
-- Second insert
insert into dbo.Data (ExampleKey, OtherProperty)
values ('test', 'Random data'), ('test2', 'more random')
查看方法
if object_id('dbo.vData') is not null drop view dbo.vData
go
create view dbo.vData
as
select
Version = row_number() over (partition by ExampleKey order by RID desc),
ExampleKey,
OtherProperty
from dbo.Data
go
select top 1000 *
from dbo.vData
备择方案
如果您需要在插入时将其保留在表中,您可能需要一个触发器(我不推荐)。
推荐阅读
- c# - 将 where 子句添加到 context.Set
在 EntityFrameworkCore - reactjs - 通过变量将自定义 CSS 类添加到返回的 jsx
- visual-studio - 如何更改 CodeLens 显示的内容
- css - 在 scss 中访问 mixin 嵌套元素
- laravel - Laravel SMTP 530 5.7.0 必须先发出 STARTTLS 命令
- javascript - 如何让我的 Discord Bot 对类似消息回复相同的答案?JavaScript
- firebase - 如何将firebase实时数据库更改为云firestore数据库?
- bash - 使用 grep 为 I/O 优先级设置指定进程 ID 时出现问题
- julia - 使用子包从文件夹结构创建包
- excel - 循环复制和粘贴