diff --git a/src/entityframeworkcore/src/entityframeworkcore3.validation/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.csproj b/src/entityframeworkcore/src/entityframeworkcore3.validation/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.csproj
index 5312d5a..aeaf16c 100644
--- a/src/entityframeworkcore/src/entityframeworkcore3.validation/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.csproj
+++ b/src/entityframeworkcore/src/entityframeworkcore3.validation/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.csproj
@@ -5,7 +5,7 @@
netstandard2.1
Aranasoft.Cobweb.EntityFrameworkCore.Validation
Aranasoft.Cobweb.EntityFrameworkCore.Validation
- 1.30.2
+ 1.30.3
AnyCPU;x64
diff --git a/src/entityframeworkcore/src/entityframeworkcore3.validation/SchemaValidator.cs b/src/entityframeworkcore/src/entityframeworkcore3.validation/SchemaValidator.cs
index a6b6ea9..90892a9 100644
--- a/src/entityframeworkcore/src/entityframeworkcore3.validation/SchemaValidator.cs
+++ b/src/entityframeworkcore/src/entityframeworkcore3.validation/SchemaValidator.cs
@@ -37,11 +37,11 @@ public class SchemaValidator {
validationErrors.AddRange(ValidateColumns(databaseModel, persistedType, validationOptions));
- if (validationOptions.ValidateIndexes) {
+ if (validationOptions.ValidateIndexes && persistedType.FindAnnotation(RelationalAnnotationNames.ViewDefinition) == null) {
validationErrors.AddRange(ValidateIndexes(databaseModel, persistedType));
}
- if (validationOptions.ValidateForeignKeys) {
+ if (validationOptions.ValidateForeignKeys && persistedType.FindAnnotation(RelationalAnnotationNames.ViewDefinition) == null) {
validationErrors.AddRange(ValidateForeignKeys(databaseModel, persistedType));
}
}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ApplicationDbContext.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ApplicationDbContext.cs
index 44dd935..4c51564 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ApplicationDbContext.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ApplicationDbContext.cs
@@ -16,6 +16,7 @@ public ApplicationDbContext(DbContextOptions options)
base.OnModelCreating(builder);
builder.ApplyConfiguration(new ViewBasedEntityMapping());
+ builder.ApplyConfiguration(new TableBasedEntityMapping());
}
}
}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingForeignKeys.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingForeignKeys.cs
index 6497d6a..11f4053 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingForeignKeys.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingForeignKeys.cs
@@ -97,7 +97,13 @@ public override void Up()
.WithColumn("Value", col => col.AsStringMax().Nullable())
;
- Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Email FROM AspNetUsers");
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable().Indexed("IX_TableBasedEntity_RoleId"))
+ ;
+
+ Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");
}
public override void Down()
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingIndexes.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingIndexes.cs
index 43880e7..659db7d 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingIndexes.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingIndexes.cs
@@ -105,7 +105,15 @@ public override void Up()
.WithColumn("Value", col => col.AsStringMax().Nullable())
;
- Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Email FROM AspNetUsers");
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable()
+ .ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
+ .OnDelete(Rule.Cascade))
+ ;
+
+ Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");
}
public override void Down()
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingViews.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingViews.cs
index da36e9f..ed24d98 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingViews.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsMissingViews.cs
@@ -107,13 +107,22 @@ public override void Up()
;
Create.Table("AspNetUserTokens")
- .WithColumn("UserId",
- col => col.AsInt32().NotNullable().PrimaryKey("PK_AspNetUserTokens")
- .ForeignKey("FK_AspNetUserTokens_AspNetUsers_UserId", "AspNetUsers", "Id")
- .OnDelete(Rule.Cascade))
- .WithColumn("LoginProvider", col => col.AsString(450).NotNullable().PrimaryKey("PK_AspNetUserTokens"))
- .WithColumn("Name", col => col.AsString(450).NotNullable().PrimaryKey("PK_AspNetUserTokens"))
- .WithColumn("Value", col => col.AsStringMax().Nullable())
+ .WithColumn("UserId",
+ col => col.AsInt32().NotNullable().PrimaryKey("PK_AspNetUserTokens")
+ .ForeignKey("FK_AspNetUserTokens_AspNetUsers_UserId", "AspNetUsers", "Id")
+ .OnDelete(Rule.Cascade))
+ .WithColumn("LoginProvider", col => col.AsString(450).NotNullable().PrimaryKey("PK_AspNetUserTokens"))
+ .WithColumn("Name", col => col.AsString(450).NotNullable().PrimaryKey("PK_AspNetUserTokens"))
+ .WithColumn("Value", col => col.AsStringMax().Nullable())
+ ;
+
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable()
+ .Indexed("IX_TableBasedEntity_RoleId")
+ .ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
+ .OnDelete(Rule.Cascade))
;
}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnNullability.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnNullability.cs
index ff3a70d..122cd93 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnNullability.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnNullability.cs
@@ -116,7 +116,16 @@ public override void Up()
.WithColumn("Value", col => col.AsStringMax().Nullable())
;
- Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Email FROM AspNetUsers");
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable()
+ .Indexed("IX_TableBasedEntity_RoleId")
+ .ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
+ .OnDelete(Rule.Cascade))
+ ;
+
+ Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");
}
public override void Down()
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnTypes.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnTypes.cs
index cdf0123..d08d6e9 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnTypes.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/MigrationsWithIncorrectColumnTypes.cs
@@ -116,7 +116,16 @@ public override void Up()
.WithColumn("Value", col => col.AsStringMax().Nullable())
;
- Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Email FROM AspNetUsers");
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable()
+ .Indexed("IX_TableBasedEntity_RoleId")
+ .ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
+ .OnDelete(Rule.Cascade))
+ ;
+
+ Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");
}
public override void Down()
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/ValidIdentityMigrations.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/ValidIdentityMigrations.cs
index 12f871c..7f60348 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/ValidIdentityMigrations.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/Migrations/ValidIdentityMigrations.cs
@@ -116,7 +116,16 @@ public override void Up()
.WithColumn("Value", col => col.AsStringMax().Nullable())
;
- Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Email FROM AspNetUsers");
+ Create.Table("TableBasedEntity")
+ .WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedEntity"))
+ .WithColumn("Field", col => col.AsString(256).Nullable())
+ .WithColumn("RoleId", col => col.AsInt32().NotNullable()
+ .Indexed("IX_TableBasedEntity_RoleId")
+ .ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
+ .OnDelete(Rule.Cascade))
+ ;
+
+ Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");
}
public override void Down()
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntity.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntity.cs
new file mode 100644
index 0000000..23f8db8
--- /dev/null
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntity.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Identity;
+
+namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
+ public class TableBasedEntity {
+ public int Id { get; set; }
+ [MaxLength(256)]
+ public string Field { get; set; }
+ [Required]
+ public IdentityRole Role { get; set; }
+ public ViewBasedEntity ViewEntity { get; set; }
+ }
+}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntityMapping.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntityMapping.cs
new file mode 100644
index 0000000..96ee5a7
--- /dev/null
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/TableBasedEntityMapping.cs
@@ -0,0 +1,11 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
+ public class TableBasedEntityMapping : IEntityTypeConfiguration
+ {
+ public void Configure(EntityTypeBuilder builder) {
+ builder.Ignore(entity => entity.ViewEntity);
+ }
+ }
+}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntity.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntity.cs
index 599ed51..4a1e879 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntity.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntity.cs
@@ -1,10 +1,14 @@
using System;
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Identity;
namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
public class ViewBasedEntity {
public int Id { get; set; }
[MaxLength(256)]
- public string Email { get; set; }
+ public string Field { get; set; }
+ public IdentityRole Role { get; set; }
+ public TableBasedEntity TableEntity { get; set; }
}
}
diff --git a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntityMapping.cs b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntityMapping.cs
index d24cb8b..109e69d 100644
--- a/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntityMapping.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore2.validation.tests/Support/ViewBasedEntityMapping.cs
@@ -6,6 +6,9 @@ public class ViewBasedEntityMapping : IQueryTypeConfiguration
{
public void Configure(QueryTypeBuilder builder) {
builder.ToView("ViewBasedEntities");
+ builder.Property("RoleId");
+ builder.HasOne(entity => entity.TableEntity).WithOne().HasForeignKey(entity => entity.Id).HasPrincipalKey(entity => entity.Id);
+ builder.HasOne(entity => entity.Role).WithMany().HasForeignKey("RoleId");
}
}
}
diff --git a/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.Tests.csproj b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.Tests.csproj
index 46fc7ea..b467520 100644
--- a/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.Tests.csproj
+++ b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Aranasoft.Cobweb.EntityFrameworkCore3.Validation.Tests.csproj
@@ -38,6 +38,7 @@
+
diff --git a/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/TableBasedEntityMapping.cs b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/TableBasedEntityMapping.cs
new file mode 100644
index 0000000..8e34deb
--- /dev/null
+++ b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/TableBasedEntityMapping.cs
@@ -0,0 +1,10 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
+ public class TableBasedEntityMapping : IEntityTypeConfiguration
+ {
+ public void Configure(EntityTypeBuilder builder) {
+ }
+ }
+}
diff --git a/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/ViewBasedEntityMapping.cs b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/ViewBasedEntityMapping.cs
index fbdc877..afee4db 100644
--- a/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/ViewBasedEntityMapping.cs
+++ b/src/entityframeworkcore/test/entityframeworkcore3.validation.tests/Support/ViewBasedEntityMapping.cs
@@ -6,6 +6,7 @@ public class ViewBasedEntityMapping : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder) {
builder.ToView("ViewBasedEntities");
+ builder.HasOne(viewBasedEntity => viewBasedEntity.TableEntity).WithOne(tableBasedEntity => tableBasedEntity.ViewEntity).HasForeignKey(entity => entity.Id);
}
}
}