Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

249 lines
8.8 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace FunctionalTests
{
using System;
using System.Data.Entity;
using FunctionalTests.Fixtures;
using Xunit;
public class SpatialScenarioTests : TestBase
{
[Fact]
public void Simple_spatial_mapping_scenario()
{
var modelBuilder = new DbModelBuilder();
modelBuilder.Entity<Spatial_Customer>();
var databaseMapping = BuildMapping(modelBuilder);
databaseMapping.AssertValid();
databaseMapping.Assert<Spatial_Customer>(c => c.Geography).DbEqual("geography", c => c.TypeName);
databaseMapping.Assert<Spatial_Customer>(c => c.Geometry).DbEqual("geometry", c => c.TypeName);
}
[Fact]
public void Complex_type_spatial_mapping_scenario()
{
var modelBuilder = new DbModelBuilder();
modelBuilder.Entity<Spatial_ComplexClass>();
var databaseMapping = BuildMapping(modelBuilder);
databaseMapping.AssertValid();
databaseMapping.Assert<Spatial_ComplexType>(c => c.Geography).DbEqual("geography", c => c.TypeName);
databaseMapping.Assert<Spatial_ComplexType>(c => c.Geometry).DbEqual("geometry", c => c.TypeName);
}
[Fact]
public void Configure_spatial_members_on_type()
{
var modelBuilder = new DbModelBuilder();
modelBuilder.Entity<Spatial_Customer>().Property(c => c.Geography).HasColumnName("the_column");
var databaseMapping = BuildMapping(modelBuilder);
databaseMapping.AssertValid();
databaseMapping.Assert<Spatial_Customer>(c => c.Geography).DbEqual("the_column", c => c.Name);
}
[Fact]
public void Should_be_able_to_use_v4_1_model_builder_without_spatials()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>();
var databaseMapping = BuildMapping(modelBuilder);
databaseMapping.AssertValid();
Assert.Equal(2.0, databaseMapping.Model.Version);
Assert.Equal(2.0, databaseMapping.Database.Version);
}
[Fact]
public void Explicitly_mapping_a_DbGeography_property_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().Property(e => e.Geography);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geography");
}
[Fact]
public void Explicitly_mapping_a_DbGeography_property_on_a_complex_type_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.ComplexType<Spatial_ComplexType>().Property(c => c.Geography);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_ComplexType", "Geography");
}
[Fact]
public void Explicitly_using_a_DbGeography_property_as_a_key_with_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().HasKey(e => e.Geography);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geography");
}
[Fact]
public void Explicitly_using_a_DbGeography_property_as_part_of_a_composite_key_with_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().HasKey(
e => new
{
e.Id,
e.Geography
});
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geography");
}
[Fact]
public void Explicitly_mapping_a_DbGeography_property_with_Map_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().Map(
mapping =>
{
mapping.ToTable("Table1");
mapping.Properties(e => e.Geography);
});
Assert.Throws<InvalidOperationException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("EntityMappingConfiguration_CannotMapIgnoredProperty", "Spatial_Customer", "Geography");
}
[Fact]
public void Explicitly_mapping_a_DbGeometry_property_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().Property(e => e.Geometry);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geometry");
}
[Fact]
public void Explicitly_mapping_a_DbGeometry_property_on_a_complex_type_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.ComplexType<Spatial_ComplexType>().Property(c => c.Geometry);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_ComplexType", "Geometry");
}
[Fact]
public void Explicitly_using_a_DbGeometry_property_as_a_key_with_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().HasKey(e => e.Geometry);
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geometry");
}
[Fact]
public void Explicitly_using_a_DbGeometry_property_as_part_of_a_composite_key_with_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().HasKey(
e => new
{
e.Id,
e.Geometry
});
Assert.Throws<NotSupportedException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("UnsupportedUseOfV3Type", "Spatial_Customer", "Geometry");
}
[Fact]
public void Explicitly_mapping_a_DbGeometry_property_with_Map_using_4_1_throws()
{
var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1);
modelBuilder.Entity<Spatial_Customer>().Map(
mapping =>
{
mapping.ToTable("Table1");
mapping.Properties(e => e.Geometry);
});
Assert.Throws<InvalidOperationException>(
() =>
BuildMapping(modelBuilder))
.ValidateMessage("EntityMappingConfiguration_CannotMapIgnoredProperty", "Spatial_Customer", "Geometry");
}
}
namespace Fixtures
{
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public class Spatial_Customer
{
public int Id { get; set; }
public DbGeometry Geometry { get; set; }
[Required]
public DbGeography Geography { get; set; }
}
public class Spatial_ComplexClass
{
public int Id { get; set; }
public Spatial_ComplexType Complex { get; set; }
}
[ComplexType]
public class Spatial_ComplexType
{
[Column("c")]
public DbGeometry Geometry { get; set; }
public DbGeography Geography { get; set; }
}
}
}