我试图在SQL Server表上使用ROWVERSION(或TIMESTAMP)数据类型进行乐观并发控制.
我的表是使用FluentMigrator设置的,我不知道如何获得我需要的数据类型.根据微软的文章ROWVERSION,非可空ROWVERSION列在语义上等同于二进制(8)列; 的可为空的ROWVERSION数据类型是相当于一个VARBINARY(8) .
这是一个例子,尽可能接近......
public override void Up()
{
Create.Table("Test")
.WithColumn("Id").AsInt32().Identity().PrimaryKey()
.WithColumn("Description").AsAnsiString(255)
.WithColumn("RowVersion").AsBinary(8).NotNullable();
}
Run Code Online (Sandbox Code Playgroud)
.WithColumn("RowVersion").AsBinary(8).NotNullable();是我无法弄清楚的线......没有.AsRowversion或.AsTimestamp选择.
提前致谢!
EF5在一周前发布,应该会有相当多的性能提升.我目前正在使用ServiceStack OrmLite,但我正在考虑转换到EF5,因为它还允许CodeFirst +它具有迁移功能.
然而,我发现的基准看起来并不是很好
http://www.servicestack.net/benchmarks/取自http://code.google.com/p/dapper-dot-net
但据我所知,他们没有更新以测试最新版本的EF5.有没有人知道EF5与OrmLite和Dapper的一些新的更新基准?
我也在考虑留在OrmLite,然后使用Fluentmigrator http://www.github.com/schambers/fluentmigrator进行迁移,而不是启用迁移的新EF5.
切换到EF5的原因,在Visual Studio和MVCScaffolding中有很多内置支持,"它更标准",因此更容易招募+外包代码的人.
但是我再次非常喜欢整个ServiceStack堆栈,包括OrmLite,我觉得它非常精心制作,虽然我自己没有做过任何系统的性能测试.
因此,我要求提供有关从ServiceStack Ormlite + Fluentmigrations切换到EF5 +以及将EF5与OrmLite进行比较的任何更新基准的建议和论据.
entity-framework fluent-migrator servicestack dapper ormlite-servicestack
我有 SQL 脚本:
CREATE TABLE TESTTABLE1(
ID_TESTTABLE1 NUMBER (18) NOT NULL,
TESTTABLE_VALUE1 NUMBER (18),
TESTTABLE_KEY1 NUMBER (18))
Run Code Online (Sandbox Code Playgroud)
并使用 Fluentmigrator:
[Migration(201302021800)]
public class Migration_201302021800 : AutoReversingMigration
{
public override void Up()
{
var url = @"Update_1.0.0.5.sql";
Execute.Script(url);
}
}
Run Code Online (Sandbox Code Playgroud)
它执行成功,如果我添加一些 SQL:
CREATE TABLE TESTTABLE1
(
ID_TESTTABLE1 NUMBER (18) NOT NULL,
TESTTABLE_VALUE1 NUMBER (18),
TESTTABLE_KEY1 NUMBER (18)
);
CREATE TABLE TESTTABLE
(
ID_TESTTABLE NUMBER (18) NOT NULL,
TESTTABLE_VALUE NUMBER (18),
TESTTABLE_KEY NUMBER (18)
);
Run Code Online (Sandbox Code Playgroud)
在 Fluentmigrator 中执行失败,带有Oracle exeption {"ORA-00911: invalid character"} …
我安装了 FluentMigration 来管理我的 SQL 文件。
在包管理中,我执行以下命令:
PM> dotnet add package FluentMigrator
PM> dotnet add package FluentMigrator.Runner
Run Code Online (Sandbox Code Playgroud)
[Migration(201805041513)]
public class _201805041513_CriacaoTabelaPessoa : ForwardOnlyMigration
{
public override void Up()
{
Create.Table("Pessoa")
.InSchema("angularCore")
.WithColumn("Id").AsInt32().Identity()
.WithColumn("Nome").AsString(80)
.WithColumn("SobreNome").AsString(50)
.WithColumn("Email").AsString(50)
.WithColumn("IdTpoPessoa").AsInt16()
.WithColumn("IdEndereco").AsInt16();
}
}
Run Code Online (Sandbox Code Playgroud)
进程外(针对某些公司要求)
PM> dotnet tool install -g FluentMigrator.DotNet.Cli
Run Code Online (Sandbox Code Playgroud)
错误:
找不到与“dotnet-tool”命令对应的可执行文件
跑进
PM> dotnet tool install -g FluentMigrator.DotNet.Cli
PM> dotnet fm migrate -p sqlite -c "Data Source=test.db" -a ".\bin\Debug\netcoreapp2.1\test.dll"
Run Code Online (Sandbox Code Playgroud)
生成teste.db
在旧版本中,您直接在数据库中运行迁移,我不明白如何更新我的数据库,即通过生成的 test.db 文件创建 Person 表?
是否可以使用FluentMigrator创建触发器,而无需使用原始SQL?
我已经查看了对象模型,以了解当前在Nuget(FluentMigrator.1.0.1.0)上发布的版本,看不到这样做的方法。
我需要像下面的代码一样创建一个外键:
Create.ForeignKey().FromTable("TCGDocFiscalOpMedItem").ForeignColumn("IDCabecalhoDocFiscal","NumeroItem").ToTable("TCGDocFiscalItem").PrimaryColumn("IDCabecalhoDocFiscal","NumeroItem");
Run Code Online (Sandbox Code Playgroud)
显然这段代码不起作用。我怎么能做这样的事情?
谢谢
给定Payment表,PaymentStatus表和PaymentHistory表,我需要从PaymentStatus表中删除Payment和PaymentHistory表具有相关记录的状态.所以很自然地意味着删除支付表之前的历史表.当然,历史数据具有多种不同状态的支付记录.我需要的是历史表删除的where子句... sql看起来像这样:
DELETE FROM PaymentHistory
WHERE PaymentId IN
(SELECT Id FROM Payment WHERE PaymentStatusCode = 'Processing')
Run Code Online (Sandbox Code Playgroud)
我不明白的是如何在FluentMigrator中实现这一点.这是我到目前为止,但在.FromTable()之后没有.Where()或其他可用的扩展方法
Delete.FromTable("PaymentHistory").Row(new {PaymentStatusCode = "Processing"});
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
我正在寻找一种方法来在创建表之前为流畅的迁移器检查编写扩展方法,就像这样
Schema.TableIfNotExist("table").InSchema("dbo").WithColumn("Id").AsInt32().NotNullable()
Run Code Online (Sandbox Code Playgroud)
是否可以编写扩展方法?
我是 fluent 迁移的新手。我想简单地从数据库中删除一行,请指导我如何做到这一点。或者如果这个问题已经在 stackoverflow 的其他地方得到了回答,请指出我正确的方向。我不想在迁移脚本中使用动态 sql。
谢谢。
我正在使用 FluentMigrator 将一个数据库架构迁移到另一个数据库架构。我有一个案例,我想在添加新数据之前检查某些数据(特别是一行)是否存在。
if (!Schema.Table("MyTable").Something().Exists)
Insert.IntoTable("MyTable").Row(new { Id = 100, Field="Value" });
Run Code Online (Sandbox Code Playgroud)
如何首先检查该行是否存在?
fluent-migrator ×10
c# ×5
.net ×4
dapper ×1
delete-row ×1
migration ×1
nhibernate ×1
oracle11g ×1
servicestack ×1
sql ×1