Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Efcore.Pg
提交
5c31a80e
E
Efcore.Pg
项目概览
jobily
/
Efcore.Pg
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
Efcore.Pg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5c31a80e
编写于
5月 15, 2016
作者:
S
Shay Rojansky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow database template on context
Closes #2
上级
659da0a5
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
66 addition
and
8 deletion
+66
-8
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/INpgsqlModelAnnotations.cs
...meworkCore.PostgreSQL/Metadata/INpgsqlModelAnnotations.cs
+1
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/Internal/NpgsqlAnnotationNames.cs
...ore.PostgreSQL/Metadata/Internal/NpgsqlAnnotationNames.cs
+1
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/Internal/NpgsqlFullAnnotationNames.cs
...PostgreSQL/Metadata/Internal/NpgsqlFullAnnotationNames.cs
+2
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/NpgsqlModelAnnotations.cs
...ameworkCore.PostgreSQL/Metadata/NpgsqlModelAnnotations.cs
+14
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/Migrations/NpgsqlMigrationsSqlGenerator.cs
...ore.PostgreSQL/Migrations/NpgsqlMigrationsSqlGenerator.cs
+10
-7
src/Npgsql.EntityFrameworkCore.PostgreSQL/Migrations/Operations/NpgsqlCreateDatabaseOperation.cs
...QL/Migrations/Operations/NpgsqlCreateDatabaseOperation.cs
+2
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/NpgsqlModelBuilderExtensions.cs
...yFrameworkCore.PostgreSQL/NpgsqlModelBuilderExtensions.cs
+11
-0
src/Npgsql.EntityFrameworkCore.PostgreSQL/Storage/Internal/NpgsqlDatabaseCreator.cs
...Core.PostgreSQL/Storage/Internal/NpgsqlDatabaseCreator.cs
+1
-1
test/Npgsql.EntityFrameworkCore.PostgreSQL.Tests/Migrations/NpgsqlMigrationSqlGeneratorTest.cs
...reSQL.Tests/Migrations/NpgsqlMigrationSqlGeneratorTest.cs
+24
-0
未找到文件。
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/INpgsqlModelAnnotations.cs
浏览文件 @
5c31a80e
...
...
@@ -30,5 +30,6 @@ namespace Microsoft.EntityFrameworkCore.Metadata
public
interface
INpgsqlModelAnnotations
:
IRelationalModelAnnotations
{
IReadOnlyList
<
IPostgresExtension
>
PostgresExtensions
{
get
;
}
string
DatabaseTemplate
{
get
;
}
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/Internal/NpgsqlAnnotationNames.cs
浏览文件 @
5c31a80e
...
...
@@ -33,5 +33,6 @@ public static class NpgsqlAnnotationNames
public
const
string
SequenceSchema
=
"SequenceSchema"
;
public
const
string
IndexMethod
=
"IndexMethod"
;
public
const
string
PostgresExtensionPrefix
=
"PostgresExtension:"
;
public
const
string
DatabaseTemplate
=
"DatabaseTemplate"
;
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/Internal/NpgsqlFullAnnotationNames.cs
浏览文件 @
5c31a80e
...
...
@@ -35,6 +35,7 @@ protected NpgsqlFullAnnotationNames(string prefix)
SequenceSchema
=
prefix
+
NpgsqlAnnotationNames
.
SequenceSchema
;
IndexMethod
=
prefix
+
NpgsqlAnnotationNames
.
IndexMethod
;
PostgresExtensionPrefix
=
prefix
+
NpgsqlAnnotationNames
.
PostgresExtensionPrefix
;
DatabaseTemplate
=
prefix
+
NpgsqlAnnotationNames
.
DatabaseTemplate
;
}
public
new
static
NpgsqlFullAnnotationNames
Instance
{
get
;
}
=
new
NpgsqlFullAnnotationNames
(
NpgsqlAnnotationNames
.
Prefix
);
...
...
@@ -46,5 +47,6 @@ protected NpgsqlFullAnnotationNames(string prefix)
public
readonly
string
SequenceSchema
;
public
readonly
string
IndexMethod
;
public
readonly
string
PostgresExtensionPrefix
;
public
readonly
string
DatabaseTemplate
;
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/Metadata/NpgsqlModelAnnotations.cs
浏览文件 @
5c31a80e
...
...
@@ -6,6 +6,7 @@
using
JetBrains.Annotations
;
using
Microsoft.EntityFrameworkCore.Metadata
;
using
Microsoft.EntityFrameworkCore.Metadata.Internal
;
using
Microsoft.EntityFrameworkCore.Utilities
;
namespace
Microsoft.EntityFrameworkCore.Metadata
{
...
...
@@ -29,5 +30,18 @@ public virtual PostgresExtension GetOrAddPostgresExtension([CanBeNull] string na
public
virtual
IReadOnlyList
<
IPostgresExtension
>
PostgresExtensions
=>
PostgresExtension
.
GetPostgresExtensions
(
Model
,
NpgsqlFullAnnotationNames
.
Instance
.
PostgresExtensionPrefix
).
ToList
();
public
virtual
string
DatabaseTemplate
{
get
{
return
(
string
)
Annotations
.
GetAnnotation
(
NpgsqlFullAnnotationNames
.
Instance
.
DatabaseTemplate
,
null
);
}
[
param
:
CanBeNull
]
set
{
SetDatabaseTemplate
(
value
);
}
}
protected
virtual
bool
SetDatabaseTemplate
([
CanBeNull
]
string
value
)
=>
Annotations
.
SetAnnotation
(
NpgsqlFullAnnotationNames
.
Instance
.
DatabaseTemplate
,
null
,
Check
.
NullButNotEmpty
(
value
,
nameof
(
value
)));
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/Migrations/NpgsqlMigrationsSqlGenerator.cs
浏览文件 @
5c31a80e
...
...
@@ -288,8 +288,7 @@ protected override void Generate(EnsureSchemaOperation operation, IModel model,
builder
.
Append
(
"CREATE SCHEMA IF NOT EXISTS "
)
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Name
))
.
AppendLine
(
SqlGenerationHelper
.
StatementTerminator
);
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Name
));
}
public
virtual
void
Generate
(
NpgsqlCreateDatabaseOperation
operation
,
IModel
model
,
RelationalCommandListBuilder
builder
)
...
...
@@ -299,8 +298,14 @@ public virtual void Generate(NpgsqlCreateDatabaseOperation operation, IModel mod
builder
.
Append
(
"CREATE DATABASE "
)
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Name
))
.
AppendLine
(
SqlGenerationHelper
.
StatementTerminator
);
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Name
));
if
(
operation
.
Template
!=
null
)
{
builder
.
Append
(
" TEMPLATE "
)
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Template
));
}
}
public
virtual
void
Generate
(
NpgsqlDropDatabaseOperation
operation
,
IModel
model
,
RelationalCommandListBuilder
builder
)
...
...
@@ -321,7 +326,7 @@ public virtual void Generate(NpgsqlDropDatabaseOperation operation, IModel model
"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '"
)
.
Append
(
operation
.
Name
)
.
Append
(
"'"
)
.
AppendLine
(
SqlGenerationHelper
.
StatementTerminator
)
.
EndCommand
(
)
.
Append
(
"DROP DATABASE "
)
.
Append
(
dbName
);
}
...
...
@@ -348,8 +353,6 @@ public virtual void Generate(NpgsqlCreatePostgresExtensionOperation operation, I
.
Append
(
" VERSION "
)
.
Append
(
SqlGenerationHelper
.
DelimitIdentifier
(
operation
.
Version
));
}
builder
.
AppendLine
(
SqlGenerationHelper
.
StatementTerminator
);
}
protected
override
void
Generate
(
DropIndexOperation
operation
,
IModel
model
,
RelationalCommandListBuilder
builder
)
...
...
src/Npgsql.EntityFrameworkCore.PostgreSQL/Migrations/Operations/NpgsqlCreateDatabaseOperation.cs
浏览文件 @
5c31a80e
...
...
@@ -28,5 +28,7 @@ namespace Microsoft.EntityFrameworkCore.Migrations.Operations
public
class
NpgsqlCreateDatabaseOperation
:
MigrationOperation
{
public
virtual
string
Name
{
get
;[
param
:
NotNull
]
set
;
}
[
CanBeNull
]
public
virtual
string
Template
{
get
;
set
;
}
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/NpgsqlModelBuilderExtensions.cs
浏览文件 @
5c31a80e
...
...
@@ -24,5 +24,16 @@ public static class NpgsqlModelBuilderExtensions
return
new
NpgsqlPostgresExtensionBuilder
(
modelBuilder
.
Model
.
Npgsql
().
GetOrAddPostgresExtension
(
name
,
schema
));
}
public
static
ModelBuilder
HasDatabaseTemplate
(
[
NotNull
]
this
ModelBuilder
modelBuilder
,
[
NotNull
]
string
templateDatabaseName
)
{
Check
.
NotNull
(
modelBuilder
,
nameof
(
modelBuilder
));
Check
.
NotEmpty
(
templateDatabaseName
,
nameof
(
templateDatabaseName
));
modelBuilder
.
Model
.
Npgsql
().
DatabaseTemplate
=
templateDatabaseName
;
return
modelBuilder
;
}
}
}
src/Npgsql.EntityFrameworkCore.PostgreSQL/Storage/Internal/NpgsqlDatabaseCreator.cs
浏览文件 @
5c31a80e
...
...
@@ -117,7 +117,7 @@ FROM information_schema.tables
"
);
IEnumerable
<
IRelationalCommand
>
CreateCreateOperations
()
=>
_migrationsSqlGenerator
.
Generate
(
new
[]
{
new
NpgsqlCreateDatabaseOperation
{
Name
=
_connection
.
DbConnection
.
Database
}
});
=>
_migrationsSqlGenerator
.
Generate
(
new
[]
{
new
NpgsqlCreateDatabaseOperation
{
Name
=
_connection
.
DbConnection
.
Database
,
Template
=
Model
.
Npgsql
().
DatabaseTemplate
}
});
/// <summary>
/// Creates migration operations that should take place immediately after creating the database,
...
...
test/Npgsql.EntityFrameworkCore.PostgreSQL.Tests/Migrations/NpgsqlMigrationSqlGeneratorTest.cs
浏览文件 @
5c31a80e
...
...
@@ -162,6 +162,30 @@ public override void CreateIndexOperation_nonunique()
Sql
);
}
[
Fact
]
public
virtual
void
CreateDatabaseOperation
()
{
Generate
(
new
NpgsqlCreateDatabaseOperation
{
Name
=
"Northwind"
});
Assert
.
Equal
(
@"CREATE DATABASE ""Northwind"";"
+
EOL
,
Sql
);
}
[
Fact
]
public
virtual
void
CreateDatabaseOperation_with_template
()
{
Generate
(
new
NpgsqlCreateDatabaseOperation
{
Name
=
"Northwind"
,
Template
=
"MyTemplate"
});
Assert
.
Equal
(
@"CREATE DATABASE ""Northwind"" TEMPLATE ""MyTemplate"";"
+
EOL
,
Sql
);
}
public
override
void
CreateSequenceOperation_with_minValue_and_maxValue
()
{
base
.
CreateSequenceOperation_with_minValue_and_maxValue
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录