我可以在SQL Server 2016中使用时态表.遗憾的是,Entity Framework 6还不知道这个功能.是否有可能使用实体框架6 使用新的查询选项(请参阅msdn)?
我创建了一个带有员工时态表的简单演示项目:
我使用edmx将表映射到实体(感谢Matt Ruwe):
使用纯sql语句一切正常:
using (var context = new TemporalEntities())
{
var employee = context.Employees.Single(e => e.EmployeeID == 2);
var query =
$@"SELECT * FROM [TemporalTest].[dbo].[{nameof(Employee)}]
FOR SYSTEM_TIME BETWEEN
'0001-01-01 00:00:00.00' AND '{employee.ValidTo:O}'
WHERE EmployeeID = 2";
var historyOfEmployee = context.Employees.SqlQuery(query).ToList();
}
Run Code Online (Sandbox Code Playgroud)
是否可以在没有纯SQL的情况下将历史记录功能添加到每个实体?我的解决方案作为实体扩展与反射来操纵SQL查询IQuerable并不完美.是否有现有的扩展或库来执行此操作?
编辑:(基于Pawel的评论)
我试图使用表值函数:
CREATE FUNCTION dbo.GetEmployeeHistory(
@EmployeeID int,
@startTime datetime2,
@endTime datetime2)
RETURNS TABLE
AS
RETURN
(
SELECT
EmployeeID,
[Name],
Position,
Department,
[Address], …Run Code Online (Sandbox Code Playgroud) 我正在阅读这个问题,我想更多地询问他展示的代码,即
for(i = 0; i < 20; i++)
for(j = 0; j < 10; j++)
a[i] = a[i]*j;
Run Code Online (Sandbox Code Playgroud)
问题是,
那个人说,
"内部循环在访问[i]十次时会调用相同的内存地址,这是我猜的时间局部性的一个例子.但是在上面的循环中是否还有空间局部性?"
我不同意他的猜测.由[a]生成的引用应该是空间局部性(它们将引用块中的下一个元素).我对吗?
我做了一个测试
for (i32 i = 0; i < 0x800000; ++i)
{
// Hopefully this can disable hardware prefetch
i32 k = (i * 997 & 0x7FFFFF) * 0x40;
_mm_prefetch(data + ((i + 1) * 997 & 0x7FFFFF) * 0x40, _MM_HINT_NTA);
for (i32 j = 0; j < 0x40; j += 0x10)
{
//__m128 v = _mm_castsi128_ps(_mm_stream_load_si128((__m128i *)(data + k + j)));
__m128 v = _mm_load_ps((float *)(data + k + j));
a_single_chain_computation
//_mm_stream_ps((float *)(data2 + k + j), v);
_mm_store_ps((float *)(data2 …Run Code Online (Sandbox Code Playgroud) 我确信这在1000个不同的地方完成了1000次.问题是我想知道是否有更好/标准/更快的方法来检查当前"时间"是否在hh:mm:ss格式中给出的两个时间值之间.例如,我的大业务逻辑不应该介于两者之间18:00:00 and 18:30:00.所以这就是我的想法:
public static boolean isCurrentTimeBetween(String starthhmmss, String endhhmmss) throws ParseException{
DateFormat hhmmssFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss");
Date now = new Date();
String yyyMMdd = hhmmssFormat.format(now).substring(0, 8);
return(hhmmssFormat.parse(yyyMMdd+starthhmmss).before(now) &&
hhmmssFormat.parse(yyyMMdd+endhhmmss).after(now));
}
Run Code Online (Sandbox Code Playgroud)
示例测试用例:
String doNotRunBetween="18:00:00,18:30:00";//read from props file
String[] hhmmss = downTime.split(",");
if(isCurrentTimeBetween(hhmmss[0], hhmmss[1])){
System.out.println("NOT OK TO RUN");
}else{
System.out.println("OK TO RUN");
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是更好的代码
我不想要的
有没有人知道处理事件和重复事件的库,比如像Runt(http://runt.rubyforge.org/)或TExp(http://texp.rubyforge.org/)这样的ruby存在的时态表达式库.这些库非常适合我需要的东西,但我需要> .NET Framework中的东西.
谢谢!
我很好奇是否有人已经实现甚至知道在NoSQL平台上构建的任何双时态数据库(例如,riak).
考虑到通过异常的流控制被(被许多人)视为反模式,是否可以使用时态库(java.time.*)来验证字符串表示有效日期,而不会捕获异常?
请考虑以下代码,它依赖于内部爆炸:
public static boolean isValidDateFormat(String date, DateTimeFormatter formatter) {
try {
formatter.parse(date);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这可以在不发生解析爆炸的情况下实现吗?有没有类似的东西formatter.isValid(date)(即使内部爆炸 - 这将取决于幕后"JDK impl").
假设我有从1951年到1980年的100个站点的年降水量数据.在一些论文中,我发现人们将PCA应用于时间序列,然后绘制空间载荷图(值为-1到1),并绘制时间序列个人电脑 例如,https://publicaciones.unirioja.es/ojs/index.php/cig/article/view/2931/2696中的图6 是PC的空间分布.
我prcomp在R中使用函数,我想知道我怎么能做同样的事情.换句话说,如何从prcomp函数的结果中提取"空间模式"和"时间模式" ?谢谢.
set.seed(1234)
rainfall = sample(x=100:1000,size = 100*30,replace = T)
rainfall=matrix(rainfall,nrow=100)
colnames(rainfall)=1951:1980
PCA = prcomp(rainfall,retx=T)
Run Code Online (Sandbox Code Playgroud)
我想使用类似于此处描述的方法实现时态属性,使用Entity Framework代码优先进行数据库存储.
我希望它针对获取当前值进行了优化,并且对历史记录进行了延迟加载,但是我不希望在父实体中为每次使用添加样板代码,就像上面链接中的方法一样.
目前我有类似下面的代码,按照惯例导致数据库模式如下所示代码.
这将按我的需要运行,但出于性能原因,我想避免获取当前属性值所需的连接(即我想将TemporalStrings.CurrentValue DB列移动到Entities.Name).
如果我试试
modelBuilder.Entity<Entity>().Property(o => o.Name.CurrentValue).HasColumnName("Name");
Run Code Online (Sandbox Code Playgroud)
它不起作用.我得到一个例外
The type 'ConsoleApplication1.TemporalString' has already been configured as an entity type. It cannot be reconfigured as a complex type.
Run Code Online (Sandbox Code Playgroud)
有什么方法可以实现这种映射,还是有更好的方法来实现这个功能?
码:
public class TemporalString
{
public int Id { get; set; }
public string CurrentValue { get; set; } // Setter would be customized to append to History.
public virtual List<TemporalStringValue> History { get; set; }
// Other methods such as string ValueAt(DateTime) would exist.
}
public …Run Code Online (Sandbox Code Playgroud) 寻找解决方法:
Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'.
Run Code Online (Sandbox Code Playgroud)
尝试在SSDT中为Visual Studio 2015使用SQL 2016系统版本(时间)表时.
我已经定义了一个基本表:
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] VARCHAR(50) NOT NULL,
[SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example]))
GO
Run Code Online (Sandbox Code Playgroud)
(假设[history]在SSDT中正确创建了模式).这是第一次建立良好.
如果我以后做出改变:
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] …Run Code Online (Sandbox Code Playgroud) sql-server temporal sql-server-data-tools visual-studio-2015 sql-server-2016