Skip to content

Commit

Permalink
fix(views): ignore foreign references to a view
Browse files Browse the repository at this point in the history
  • Loading branch information
jayharris committed Oct 29, 2020
1 parent 1d31a06 commit 1cc5335
Show file tree
Hide file tree
Showing 16 changed files with 135 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public class SchemaValidator {
var entityTable = persistedType.Relational();
var validationErrors = new List<string>();

foreach (var foreignKey in persistedType.GetForeignKeys()) {
foreach (var foreignKey in persistedType.GetForeignKeys().Where(key => !key.PrincipalEntityType.IsQueryType)) {
var databaseForeignKey = databaseModel.GetForeignKey(foreignKey);
if (databaseForeignKey == null) {
validationErrors.Add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public class SchemaValidator {
private IEnumerable<string> ValidateForeignKeys(DatabaseModel databaseModel, IEntityType persistedType) {
var validationErrors = new List<string>();

foreach (var foreignKey in persistedType.GetForeignKeys()) {
foreach (var foreignKey in persistedType.GetForeignKeys().Where(key => key.PrincipalEntityType.FindAnnotation(RelationalAnnotationNames.ViewDefinition) == null)) {
var databaseForeignKey = databaseModel.GetForeignKey(foreignKey);
if (databaseForeignKey == null) {
validationErrors.Add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,29 @@ public override void Up()
;

Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32().NotNullable()
.Indexed("IX_TableBasedChildEntity_ViewEntityId"))
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

Execute.Sql(@"DROP VIEW ViewBasedEntities");

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,28 @@ public override void Up()
;

Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32().NotNullable())
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

Execute.Sql(@"DROP VIEW ViewBasedEntities");

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,27 @@ public override void Up()
.ForeignKey("FK_TableBasedEntity_AspNetRoles_RoleId", "AspNetRoles", "Id")
.OnDelete(Rule.Cascade))
;

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32() .NotNullable()
.Indexed("IX_TableBasedChildEntity_ViewEntityId"))
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,29 @@ public override void Up()
;

Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32() .NotNullable()
.Indexed("IX_TableBasedChildEntity_ViewEntityId"))
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

Execute.Sql(@"DROP VIEW ViewBasedEntities");

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,29 @@ public override void Up()
;

Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32() .NotNullable()
.Indexed("IX_TableBasedChildEntity_ViewEntityId"))
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

Execute.Sql(@"DROP VIEW ViewBasedEntities");

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,29 @@ public override void Up()
;

Execute.Sql(@"CREATE VIEW ViewBasedEntities AS SELECT Id, Field, RoleId FROM TableBasedEntity");

Create.Table("TableBasedChildEntity")
.WithColumn("Id", col => col.AsInt32().NotNullable().PrimaryKey("PK_TableBasedChildEntity"))
.WithColumn("Name", col => col.AsString(20000).Nullable())
.WithColumn("ViewEntityId", col => col.AsInt32().NotNullable()
.Indexed("IX_TableBasedChildEntity_ViewEntityId"))
;
}

public override void Down()
{
if (Schema.Table("TableBasedChildEntity").Exists())
{
Delete.Table("TableBasedChildEntity");
}

Execute.Sql(@"DROP VIEW ViewBasedEntities");

if (Schema.Table("TableBasedEntity").Exists())
{
Delete.Table("TableBasedEntity");
}

if (Schema.Table("AspNetRoleClaims").Exists())
{
Delete.Table("AspNetRoleClaims");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;
using System.ComponentModel.DataAnnotations;

namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
public class TableBasedChildEntity {
[Key]
public int Id { get; set; }
[MaxLength(10000)]
public string Name { get; set; }
[Required]
public ViewBasedEntity ViewEntity { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
public class TableBasedChildEntityMapping : IEntityTypeConfiguration<TableBasedChildEntity>
{
public void Configure(EntityTypeBuilder<TableBasedChildEntity> builder) {
builder.HasOne(child => child.ViewEntity).WithMany();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
public class TableBasedEntity {
[Key]
public int Id { get; set; }
[MaxLength(256)]
public string Field { get; set; }
[Required]
public IdentityRole<int> Role { get; set; }
public ViewBasedEntity ViewEntity { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Aranasoft.Cobweb.EntityFrameworkCore.Validation.Tests.Support {
public class TableBasedEntityMapping : IEntityTypeConfiguration<TableBasedEntity>
{
public void Configure(EntityTypeBuilder<TableBasedEntity> builder) {
builder.Ignore(entity => entity.ViewEntity);
builder.HasOne(table => table.Role).WithMany();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ public class ViewBasedEntityMapping : IQueryTypeConfiguration<ViewBasedEntity>
{
public void Configure(QueryTypeBuilder<ViewBasedEntity> builder) {
builder.ToView("ViewBasedEntities");
builder.Property<int>("RoleId");
builder.HasOne(entity => entity.TableEntity).WithOne().HasForeignKey<ViewBasedEntity>(entity => entity.Id).HasPrincipalKey<TableBasedEntity>(entity => entity.Id);
builder.HasOne(entity => entity.Role).WithMany().HasForeignKey("RoleId");
builder.HasOne(entity => entity.TableEntity).WithMany().HasForeignKey(view => view.Id);
builder.HasOne(entity => entity.Role).WithMany();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,12 @@
<Compile Include="..\entityframeworkcore2.validation.tests\Support\SqlServer\SqlServerLocalDbFixture.cs" Link="Support\SqlServer\SqlServerLocalDbFixture.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\SqlServer\SqlServerMigrationsFixture.cs" Link="Support\SqlServer\SqlServerMigrationsFixture.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\SqlServer\SqlServerTestingProcessor.cs" Link="Support\SqlServer\SqlServerTestingProcessor.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\TableBasedChildEntity.cs" Link="Support\TableBasedChildEntity.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\TableBasedChildEntityMapping.cs" Link="Support\TableBasedChildEntityMapping.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\TableBasedEntity.cs" Link="Support\TableBasedEntity.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\TableBasedEntityMapping.cs" Link="Support\TableBasedEntityMapping.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\ViewBasedEntity.cs" Link="Support\ViewBasedEntity.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\ViewBasedEntityMapping.cs" Link="Support\ViewBasedEntityMapping.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\XUnit\ConditionalFactAttribute.cs" Link="Support\XUnit\ConditionalFactAttribute.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\XUnit\ConditionalFactAttributeDiscoverer.cs" Link="Support\XUnit\ConditionalFactAttributeDiscoverer.cs" />
<Compile Include="..\entityframeworkcore2.validation.tests\Support\XUnit\ConditionalFactTestCase.cs" Link="Support\XUnit\ConditionalFactTestCase.cs" />
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit 1cc5335

Please sign in to comment.