You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.FunctionalTests/DataAnnotationJetTest.cs

147 lines
5.5 KiB
C#

using System;
using EntityFrameworkCore.Jet.Storage.Internal;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Xunit;
namespace EntityFramework.Jet.FunctionalTests
{
public class DataAnnotationJetTest : DataAnnotationTestBase<JetTestStore, DataAnnotationJetFixture>
{
public DataAnnotationJetTest(DataAnnotationJetFixture fixture)
: base(fixture)
{
fixture.TestSqlLoggerFactory.Clear();
}
public override ModelBuilder Non_public_annotations_are_enabled()
{
var modelBuilder = base.Non_public_annotations_are_enabled();
var relational = GetProperty<PrivateMemberAnnotationClass>(modelBuilder, "PersonFirstName").Relational();
Assert.Equal("dsdsd", relational.ColumnName);
Assert.Equal("nvarchar(128)", relational.ColumnType);
return modelBuilder;
}
public override ModelBuilder Key_and_column_work_together()
{
var modelBuilder = base.Key_and_column_work_together();
var relational = GetProperty<ColumnKeyAnnotationClass1>(modelBuilder, "PersonFirstName").Relational();
Assert.Equal("dsdsd", relational.ColumnName);
Assert.Equal("nvarchar(128)", relational.ColumnType);
return modelBuilder;
}
public override ModelBuilder Key_and_MaxLength_64_produce_nvarchar_64()
{
var modelBuilder = base.Key_and_MaxLength_64_produce_nvarchar_64();
var property = GetProperty<ColumnKeyAnnotationClass2>(modelBuilder, "PersonFirstName");
Assert.Equal("varchar(64)", new JetTypeMapper(new RelationalTypeMapperDependencies()).FindMapping(property).StoreType);
return modelBuilder;
}
public override ModelBuilder Timestamp_takes_precedence_over_MaxLength()
{
var modelBuilder = base.Timestamp_takes_precedence_over_MaxLength();
var property = GetProperty<TimestampAndMaxlen>(modelBuilder, "MaxTimestamp");
Assert.Equal("varbinary(8)", new JetTypeMapper(new RelationalTypeMapperDependencies()).FindMapping(property).StoreType);
return modelBuilder;
}
public override ModelBuilder Timestamp_takes_precedence_over_MaxLength_with_value()
{
var modelBuilder = base.Timestamp_takes_precedence_over_MaxLength_with_value();
var property = GetProperty<TimestampAndMaxlen>(modelBuilder, "NonMaxTimestamp");
Assert.Equal("varbinary(8)", new JetTypeMapper(new RelationalTypeMapperDependencies()).FindMapping(property).StoreType);
return modelBuilder;
}
public override ModelBuilder TableNameAttribute_affects_table_name_in_TPH()
{
var modelBuilder = base.TableNameAttribute_affects_table_name_in_TPH();
var relational = modelBuilder.Model.FindEntityType(typeof(TNAttrBase)).Relational();
Assert.Equal("A", relational.TableName);
return modelBuilder;
}
[Fact(Skip = "Unsupported by JET")]
public override void ConcurrencyCheckAttribute_throws_if_value_in_database_changed()
{
using (var context = CreateContext())
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
DataAnnotationModelInitializer.Seed(context);
Fixture.TestSqlLoggerFactory.Clear();
}
base.ConcurrencyCheckAttribute_throws_if_value_in_database_changed();
Assert.Equal(@"SELECT TOP(1) [r].[UniqueNo], [r].[MaxLengthProperty], [r].[Name], [r].[RowVersion]
FROM [Sample] AS [r]
WHERE [r].[UniqueNo] = 1
SELECT TOP(1) [r].[UniqueNo], [r].[MaxLengthProperty], [r].[Name], [r].[RowVersion]
FROM [Sample] AS [r]
WHERE [r].[UniqueNo] = 1
@p2='1'
@p0='ModifiedData' (Nullable = false) (Size = 4000)
@p1='00000000-0000-0000-0003-000000000001'
@p3='00000001-0000-0000-0000-000000000001'
UPDATE [Sample] SET [Name] = @p0, [RowVersion] = @p1
WHERE [UniqueNo] = @p2 AND [RowVersion] = @p3
@p2='1'
@p0='ChangedData' (Nullable = false) (Size = 4000)
@p1='00000000-0000-0000-0002-000000000001'
@p3='00000001-0000-0000-0000-000000000001'
UPDATE [Sample] SET [Name] = @p0, [RowVersion] = @p1
WHERE [UniqueNo] = @p2 AND [RowVersion] = @p3", Sql);
}
public override void StringLengthAttribute_throws_while_inserting_value_longer_than_max_length()
{
Fixture.TestSqlLoggerFactory.Clear();
base.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length();
}
[Fact(Skip = "Unsupported by JET: rowversion unsupported")]
public override void TimestampAttribute_throws_if_value_in_database_changed()
{
using (var context = CreateContext())
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
DataAnnotationModelInitializer.Seed(context);
Assert.True(context.Model.FindEntityType(typeof(Two)).FindProperty("Timestamp").IsConcurrencyToken);
}
base.TimestampAttribute_throws_if_value_in_database_changed();
// Not validating SQL because not significantly different from other tests and
// row version value is not stable.
}
private const string FileLineEnding = @"
";
private string Sql => Fixture.TestSqlLoggerFactory.Sql.Replace(Environment.NewLine, FileLineEnding);
}
}