I'm experimenting with Devart and EF 5 (although using VS 2010). I'm unable to get DropCreateDatabaseIfModelChanges or DropCreateDatabaseAlways to work. The database is created with no problems the first time around with sequences, triggers, primary and foreign keys, but when it is supposed to be dropped it gives me an error: ORA-00955: name is already used by an existing object. Isn't this supposed to drop all user objects in the schema for me? Am I missing something? I'm using Oracle 11g express locally
Context:
Code: Select all
using System.Data.Entity;
using Devart.Data.Oracle;
using Devart.Data.Oracle.Entity.Configuration;
namespace CodeFirstConsole.EF
{
public class Context : DbContext
{
public Context() : this(ConfigurationManager.ConnectionStrings["Model1Container"].ConnectionString)
{
}
public Context(string connectionString) : base(new OracleConnection(connectionString), true)
{
var config = OracleEntityProviderConfig.Instance;
config.Workarounds.ColumnTypeCasingConventionCompatibility = true;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
public DbSet<Country> Countries { get; set; }
}
}
Code: Select all
public class Country
{
[Key(),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CountryID { get; set; }
public string CountryName { get; set; }
public int RegionID { get; set; }
public string Continent { get; set; }
//public Language Language { get; set; }
}
Code: Select all
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new Initializer());
try
{
using (var ctx = new Context(ConfigurationManager.ConnectionStrings["Model1Container"].ConnectionString))
{
var data = ctx.Countries.ToList();
Console.WriteLine(string.Format("Got countries from Oracle DB. Total count is {0}", data.Count));
ctx.Countries.Add(new Country { CountryName = "Chile", RegionID = 2, Continent = "South America" });
ctx.SaveChanges();
}
}
catch (Exception e)
{
Console.Write(e.ToString());
}
Console.Read();
}
}
Code: Select all
public class Initializer : DropCreateDatabaseAlways<Context>
{
protected override void Seed(Context context)
{
base.Seed(context);
}
}
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<connectionStrings>
<add name="Model1Container" connectionString="DATA SOURCE=localhost;PASSWORD=codefirst;PERSIST SECURITY INFO=True;USER ID=codefirst" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Devart.Data.Oracle.OracleException (0x80004005): ORA-02449: unique/primary keys in table referenced by foreign keys
If I specify that I want to drop and recreate the database do I have to worry about foreign key constraints?
In both projects I reference the following assemblies:
- C:\Program Files (x86)\Common Files\Devart\dotConnect\5.0\Net2\Common\Devart.Data.Oracle.dll (version 7.2.77.0)
- C:\Program Files (x86)\Devart\dotConnect\Oracle\Entity\EF4\Devart.Data.Oracle.Entity.dll (version 7.2.77.0)
- C:\Program Files (x86)\Devart\dotConnect\Oracle\Entity\EF4\Devart.Data.Oracle.Entity.Migrations.dll (version 7.2.77.0)
- Installed EntityFramework 5 via Nuget