C# 具有实体框架的从属增量主键
我第一次使用C#、Entity Framework 6.1.3代码优先、SQL Server,并且在创建依赖的自动递增键时遇到问题 我有这个:C# 具有实体框架的从属增量主键,c#,sql,sql-server,entity-framework,entity-framework-6,C#,Sql,Sql Server,Entity Framework,Entity Framework 6,我第一次使用C#、Entity Framework 6.1.3代码优先、SQL Server,并且在创建依赖的自动递增键时遇到问题 我有这个: class One { [Key] [Required] string exampleKey { get; set; } string otherProperty { get; set; } } class Two { [Required] [Key]
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; }
}
我对类Two
的Version
属性感兴趣,当您插入数据时,它会使ID像
类别One
|exampleKey|otherProperty|
|"test" |"random data"|
|"test2" |"more random"|
类2个
|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
备选方案
如果需要在插入时将其保存在表中,则可能需要一个触发器(我不建议这样做)