Skip to content

Commit

Permalink
Sql Server support + Migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
galvesribeiro committed Oct 5, 2023
1 parent ff5d7c7 commit 32257bb
Show file tree
Hide file tree
Showing 55 changed files with 1,987 additions and 44 deletions.
2 changes: 2 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
<PackageVersion Include="System.Collections.Immutable" Version="7.0.0" />
<!-- Microsoft packages -->
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="7.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.11" />
<PackageVersion Include="Microsoft.Azure.Cosmos" Version="3.34.0" />
<PackageVersion Include="Microsoft.Build" Version="17.3.2" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
Expand Down
38 changes: 38 additions & 0 deletions Orleans.sln
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,9 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Orleans.Serialization.Protobuf", "src\Serializers\Orleans.Serialization.Protobuf\Orleans.Serialization.Protobuf.csproj", "{A073C0EE-8732-42F9-A22E-D47034E25076}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EFCore", "EFCore", "{616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}"
ProjectSection(SolutionItems) = preProject
src\EFCore\Readme.md = src\EFCore\Readme.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.Clustering.EntityFrameworkCore", "src\EFCore\Orleans.Clustering.EntityFrameworkCore\Orleans.Clustering.EntityFrameworkCore.csproj", "{3DE92182-011E-4518-AE68-78C6547FFFCF}"
EndProject
Expand All @@ -233,6 +236,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.Reminders.EntityFra
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.GrainDirectory.EntityFrameworkCore", "src\EFCore\Orleans.GrainDirectory.EntityFrameworkCore\Orleans.GrainDirectory.EntityFrameworkCore.csproj", "{D772413C-B6EC-4CBC-8D1E-714176A81F26}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tester.EFCore", "test\Extensions\Tester.EFCore\Tester.EFCore.csproj", "{638B4CAA-856E-43CE-9888-A8F021350AE0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.Clustering.EntityFrameworkCore.SqlServer", "src\EFCore\Orleans.Clustering.EntityFrameworkCore.SqlServer\Orleans.Clustering.EntityFrameworkCore.SqlServer.csproj", "{C02CCF05-CBA0-4C1C-8622-50BD01928502}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.GrainDirectory.EntityFrameworkCore.SqlServer", "src\EFCore\Orleans.GrainDirectory.EntityFrameworkCore.SqlServer\Orleans.GrainDirectory.EntityFrameworkCore.SqlServer.csproj", "{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.Persistence.EntityFrameworkCore.SqlServer", "src\EFCore\Orleans.Persistence.EntityFrameworkCore.SqlServer\Orleans.Persistence.EntityFrameworkCore.SqlServer.csproj", "{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orleans.Reminders.EntityFrameworkCore.SqlServer", "src\EFCore\Orleans.Reminders.EntityFrameworkCore.SqlServer\Orleans.Reminders.EntityFrameworkCore.SqlServer.csproj", "{CC8ECC81-4160-47E9-B9D7-E578BAC424F7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -619,6 +632,26 @@ Global
{D772413C-B6EC-4CBC-8D1E-714176A81F26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D772413C-B6EC-4CBC-8D1E-714176A81F26}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D772413C-B6EC-4CBC-8D1E-714176A81F26}.Release|Any CPU.Build.0 = Release|Any CPU
{638B4CAA-856E-43CE-9888-A8F021350AE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{638B4CAA-856E-43CE-9888-A8F021350AE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{638B4CAA-856E-43CE-9888-A8F021350AE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{638B4CAA-856E-43CE-9888-A8F021350AE0}.Release|Any CPU.Build.0 = Release|Any CPU
{C02CCF05-CBA0-4C1C-8622-50BD01928502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C02CCF05-CBA0-4C1C-8622-50BD01928502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C02CCF05-CBA0-4C1C-8622-50BD01928502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C02CCF05-CBA0-4C1C-8622-50BD01928502}.Release|Any CPU.Build.0 = Release|Any CPU
{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F}.Release|Any CPU.Build.0 = Release|Any CPU
{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6}.Release|Any CPU.Build.0 = Release|Any CPU
{CC8ECC81-4160-47E9-B9D7-E578BAC424F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC8ECC81-4160-47E9-B9D7-E578BAC424F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC8ECC81-4160-47E9-B9D7-E578BAC424F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC8ECC81-4160-47E9-B9D7-E578BAC424F7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -733,6 +766,11 @@ Global
{7E395297-508D-4287-A5AF-FBC9F2B25DCA} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{084715C6-2A31-452B-8AFF-FAC7E6F70445} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{D772413C-B6EC-4CBC-8D1E-714176A81F26} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{638B4CAA-856E-43CE-9888-A8F021350AE0} = {082D25DB-70CA-48F4-93E0-EC3455F494B8}
{C02CCF05-CBA0-4C1C-8622-50BD01928502} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{54F742D9-B721-4B2D-98F1-B2EDA8E8C70F} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{95F5EC32-BEFC-4FBA-8BEA-857007AEB9C6} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
{CC8ECC81-4160-47E9-B9D7-E578BAC424F7} = {616ECAC3-2EA7-4819-9A05-EF4F4D8DDFA8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7BFB3429-B5BB-4DB1-95B4-67D77A864952}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
END;
GO

BEGIN TRANSACTION;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
CREATE TABLE [Clusters] (
[Id] nvarchar(450) NOT NULL,
[Timestamp] datetimeoffset NOT NULL,
[Version] int NOT NULL,
[ETag] rowversion NOT NULL,
CONSTRAINT [PK_Cluster] PRIMARY KEY NONCLUSTERED ([Id])
);
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
CREATE TABLE [Silos] (
[ClusterId] nvarchar(450) NOT NULL,
[Address] nvarchar(45) NOT NULL,
[Port] int NOT NULL,
[Generation] int NOT NULL,
[Name] nvarchar(150) NOT NULL,
[HostName] nvarchar(150) NOT NULL,
[Status] int NOT NULL,
[ProxyPort] int NULL,
[SuspectingTimes] nvarchar(max) NULL,
[SuspectingSilos] nvarchar(max) NULL,
[StartTime] datetimeoffset NOT NULL,
[IAmAliveTime] datetimeoffset NOT NULL,
[ETag] rowversion NOT NULL,
CONSTRAINT [PK_Silo] PRIMARY KEY NONCLUSTERED ([ClusterId], [Address], [Port], [Generation]),
CONSTRAINT [FK_Silos_Clusters_ClusterId] FOREIGN KEY ([ClusterId]) REFERENCES [Clusters] ([Id]) ON DELETE CASCADE
);
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
CREATE NONCLUSTERED INDEX [IDX_Silo_ClusterId] ON [Silos] ([ClusterId]);
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
CREATE NONCLUSTERED INDEX [IDX_Silo_ClusterId_Status] ON [Silos] ([ClusterId], [Status]);
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
CREATE NONCLUSTERED INDEX [IDX_Silo_ClusterId_Status_IAmAlive] ON [Silos] ([ClusterId], [Status], [IAmAliveTime]);
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20231005032242_InitialClusteringSchema')
BEGIN
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20231005032242_InitialClusteringSchema', N'7.0.11');
END;
GO

COMMIT;
GO

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace Orleans.Clustering.EntityFrameworkCore.SqlServer.Data.Migrations
{
/// <inheritdoc />
public partial class InitialClusteringSchema : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Clusters",
columns: table => new
{
Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
Timestamp = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
Version = table.Column<int>(type: "int", nullable: false),
ETag = table.Column<byte[]>(type: "rowversion", rowVersion: true, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Cluster", x => x.Id)
.Annotation("SqlServer:Clustered", false);
});

migrationBuilder.CreateTable(
name: "Silos",
columns: table => new
{
ClusterId = table.Column<string>(type: "nvarchar(450)", nullable: false),
Address = table.Column<string>(type: "nvarchar(45)", maxLength: 45, nullable: false),
Port = table.Column<int>(type: "int", nullable: false),
Generation = table.Column<int>(type: "int", nullable: false),
Name = table.Column<string>(type: "nvarchar(150)", maxLength: 150, nullable: false),
HostName = table.Column<string>(type: "nvarchar(150)", maxLength: 150, nullable: false),
Status = table.Column<int>(type: "int", nullable: false),
ProxyPort = table.Column<int>(type: "int", nullable: true),
SuspectingTimes = table.Column<string>(type: "nvarchar(max)", nullable: true),
SuspectingSilos = table.Column<string>(type: "nvarchar(max)", nullable: true),
StartTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
IAmAliveTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
ETag = table.Column<byte[]>(type: "rowversion", rowVersion: true, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Silo", x => new { x.ClusterId, x.Address, x.Port, x.Generation })
.Annotation("SqlServer:Clustered", false);
table.ForeignKey(
name: "FK_Silos_Clusters_ClusterId",
column: x => x.ClusterId,
principalTable: "Clusters",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});

migrationBuilder.CreateIndex(
name: "IDX_Silo_ClusterId",
table: "Silos",
column: "ClusterId")
.Annotation("SqlServer:Clustered", false);

migrationBuilder.CreateIndex(
name: "IDX_Silo_ClusterId_Status",
table: "Silos",
columns: new[] { "ClusterId", "Status" })
.Annotation("SqlServer:Clustered", false);

migrationBuilder.CreateIndex(
name: "IDX_Silo_ClusterId_Status_IAmAlive",
table: "Silos",
columns: new[] { "ClusterId", "Status", "IAmAliveTime" })
.Annotation("SqlServer:Clustered", false);
}

/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Silos");

migrationBuilder.DropTable(
name: "Clusters");
}
}
}
Loading

0 comments on commit 32257bb

Please sign in to comment.