We are trying to run our integration tests to see if dotConnect can pass them. When Visual Studio Test runner starts, it calls the TestConfig below. An Oracle DB is created and seed data inserted successfully.
The Problem is that when the first test enumerates a query, EF tries to reseed the db and errors when it tries to insert a record that already exists. Each test creates a new EntityConfig based upon the connection string in App.config.
This behavior is not experienced when run on SQL Server.
Please advise.
Integration Test Initializer:
Code: Select all
[TestClass]
class TestSetUp
{
[AssemblyInitialize]
public static void TestConfig(TestContext testContext)
{
AutoMapperConfiguration.Configure();
Devart.Data.Oracle.OracleMonitor monitor =
new Devart.Data.Oracle.OracleMonitor() { IsActive = true };
// You use the capability for configuring the behavior of the EF-provider:
var config = OracleEntityProviderConfig.Instance;
// Now, you switch off schema name generation while generating
// DDL scripts and DML:
config.Workarounds.IgnoreSchemaName = true;
config.Workarounds.ColumnTypeCasingConventionCompatibility = true;
//Set DeleteDatabaseBehavior
config.DatabaseScript.Schema.DeleteDatabaseBehaviour =
DeleteDatabaseBehaviour.AllSchemaObjects;
//--------------------------------------------------------------
DbConnection oracleConnection =
new Devart.Data.Oracle.OracleConnection {
UserId = "admin",
Password = "admin",
Server = "srv08oracle11",
Direct = true,
Sid = "xe" };
oracleConnection.StateChange += new StateChangeEventHandler(Connection_StateChange);
using (var context = new SumoContext(oracleConnection))
{
Database.SetInitializer<SumoContext>(new DatabaseInitializerTest(
new OracleClient(context)));
// Make sure Code First has built the database schema before we open the connection
context.Database.Initialize(force: false);
}
}
// On connection opening, we change the current schema to "EFTEST2":
static void Connection_StateChange(object sender, StateChangeEventArgs e)
{
if (e.CurrentState == ConnectionState.Open)
{
DbConnection connection = (DbConnection)sender;
connection.ChangeDatabase("EFTEST2");
}
}
Code: Select all
[InjectionConstructor]
public EntityContext()
: base("Name=EntityContext")
{
}
public EntityContext(DbConnection connection)
: base(connection, true)
{
}
public IDbSet<Catalog> EntityModel { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Oracle Specific
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.ColumnTypeCasingConvention>();
modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
//Common
modelBuilder.Configurations.Add(new EntityModelMap());
Code: Select all
<add name="EntityContext" connectionString="User Id=EFTest2;Password=EFTEST2;Server=srv08oracle11;Direct=True;Sid=xe" providerName="Devart.Data.Oracle" />
<!--<add name="EntityContext" connectionString="User Id=admin;Password=admin;Server=srv08oracle11;Direct=True;Sid=xe" providerName="Devart.Data.Oracle" />-->