是否可以从2012年升级到2014年的SqlServer localDB?
我们目前使用的是SQL Server 2012的版本11.我需要从SQL Server 2014升级到版本12.
我希望能够在不丢失表和数据的情况下完成.
我安装了一个新的localDB但是我没有我的数据.它还有另一个名称,我无法真正更改配置文件,因为它是一个团队项目.
我尝试使用命令行sqlLocalDB工具创建一个名为v11.0的2014版本,但它在旧的2012版本中以任何方式创建它.
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create v11.0
LocalDB instance "v11.0" created with version 11.0.3000.0.
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create v12.0
LocalDB instance "v12.0" created with version 12.0.2000.8.
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create aaaaa
LocalDB instance "aaaaa" created with version 12.0.2000.8.
Run Code Online (Sandbox Code Playgroud)
为什么命名v11.0会改变使用哪个版本?
如何升级现有的v11.0?
我可以在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) 我一直在寻找一些使用Entity Framework的审计钩子.其中许多都显示旧的/新的价值比较.这对于审计跟踪非常有用,但我正在寻找快照对象.
例如......假设我有一个管理产品的应用程序.产品具有多个属性和关联的其他对象.假设我将对象更改了10次.我们还要说,重要的是我可以查看这些对象更改的屏幕(不是审计跟踪,而是以只读格式实际显示的屏幕).我感兴趣的是能够为所有这10个更改(取决于我想看到的)检索原始EF产品对象(包含所有相关数据)并使用它来绑定到我的屏幕.
如果我正在使用SQL Server,那么我现在应该为序列化对象使用什么类型(XML,blob等)?这样做有意义吗?
我们最近将我们的项目升级到Microsoft.EntityFrameworkCore 6.0.0. 此版本支持开箱即用的 SQL Server 时态表。
自 Entity Framework Core 3.1 起,我们就使用时态表并使用自定义迁移,如下所述:
简单地遵循微软的指南当然是行不通的,因为默认的列名称是PeriodStartandPeriodEnd而不是我们的SysStartTimeand SysEndTime。历史表名称也不匹配。
modelBuilder
.Entity<Comment>()
.ToTable("Comments", b => b.IsTemporal());
Run Code Online (Sandbox Code Playgroud)
迁移创建:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterTable(
name: "Comments")
.Annotation("SqlServer:IsTemporal", true)
.Annotation("SqlServer:TemporalHistoryTableName", "CommentsHistory")
.Annotation("SqlServer:TemporalHistoryTableSchema", null)
.Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd")
.Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart");
migrationBuilder.AddColumn<DateTime>(
name: "PeriodEnd",
table: "Comments",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified))
.Annotation("SqlServer:IsTemporal", true)
.Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd")
.Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart");
migrationBuilder.AddColumn<DateTime>(
name: …Run Code Online (Sandbox Code Playgroud) .net c# entity-framework entity-framework-core temporal-tables
我试图弄清楚如何使用 Code First Entity Framework 并保留某些表的快照历史记录。这意味着对于我想要跟踪的每个表,我希望有一个后缀为 _History 的重复表。每次我对跟踪表行进行更改时,在新数据保存到原始表之前,数据库中的数据都会复制到历史表中,版本列会增加。
所以想象我有一个名为 Record 的表。我有一排(ID:1,名称:一,版本:1)。当我将其更改为 (ID1:Name:Changed,Version:2) 时,Record_History 表将获得一行 (ID:1,Name:One,Version:1)。
我已经看到了很好的例子,并且知道有一些库可以使用实体框架来保存更改的审计日志,但我需要在 SQL 报告的每个修订版中获得实体的完整快照。
在我的 C# 中,我有一个基类,我所有的“跟踪”表等效实体类都继承自:
public abstract class TrackedEntity
{
[Column(TypeName = "varchar")]
[MaxLength(48)]
[Required]
public string ModifiedBy { get; set; }
[Required]
public DateTime Modified { get; set; }
public int Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的实体类之一的示例是:
public sealed class Record : TrackedEntity
{
[Key]
public int RecordID { get; set; }
[MaxLength(64)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在对于我坚持的部分。我想避免为我创建的每个实体输入和维护一个单独的 …