0

I am working with the newest DevArt Oracle version and created a EDML file that connects to my Oracle 12 database and get the models with the db first approach.

I followed this howto: https://www.devart.com/entitydeveloper/docs/

So I have my context and my model auto generated:

    public partial class KiddataAdminEntities : DbContext
{
    #region Constructors

    /// <summary>
    /// Initialize a new KiddataAdminEntities object.
    /// </summary>
    public KiddataAdminEntities() :
            base(@"name=KiddataAdminEntitiesConnectionString")
    {
        Configure();
    }

    /// <summary>
    /// Initializes a new KiddataAdminEntities object using the connection string found in the 'KiddataAdminEntities' section of the application configuration file.
    /// </summary>
    public KiddataAdminEntities(string nameOrConnectionString) :
            base(nameOrConnectionString)
    {
        Configure();
    }

    private void Configure()
    {
        this.Configuration.AutoDetectChangesEnabled = true;
        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = true;
        this.Configuration.ValidateOnSaveEnabled = true;
    }


    #endregion

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Anrede> Anrede { get; set; }
}

Now I try to get it to work in my main in another project (just a simple console application with a start.cs):

 KiddataAdminEntities context = new KiddataAdminEntities("User Id=xxxx;Password=xxxx;Server=xx;Direct=True;Sid=xxxx;Persist Security Info=True");
        var listOfAnrede = context.Anrede.ToList();

So now I get the error "Keyword user id not supported". I googled this and I found out that problably EF6 is trying to get a default connection, not an Oracle connection with DevArt. I tried to play with the app.config in different ways but it didn't help.

Now I tried to create my own connection with the DevArt.Data.Oracle provider, like shown here:

https://www.devart.com/dotconnect/oracle/articles/tutorial-connection.html

  OracleConnection oc = new OracleConnection();
        oc.ConnectionString = constring2;
        oc.Open();
        var test = oc.ServerVersion;

This works fine, so the connectionstring is okay, but still I can't put these two together. I tried to overload the constructor so I can put in my Connection:

       public KiddataAdminEntities(DbConnection con, bool contextOwnsConnection) 
        : base(con, contextOwnsConnection)
    {

    }

Then I got the error on

         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        throw new UnintentionalCodeFirstException();
    }

That I should not do that...

1 Answer 1

1

If you are using XML mapping with Devart Entity Model (*.edml), try this code:

    using Devart.Data.Oracle;
    using System.Data.EntityClient;
    
    ...
    OracleConnectionStringBuilder oracleBuilder = new OracleConnectionStringBuilder();
    oracleBuilder.UserId = "...";
    oracleBuilder.Password = "...";
    oracleBuilder.Server = "...";
    oracleBuilder.Direct = true;
    oracleBuilder.Sid = "...";
    oracleBuilder.PersistSecurityInfo = true;

    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
    entityBuilder.Provider = "Devart.Data.Oracle";
    entityBuilder.ProviderConnectionString = oracleBuilder.ConnectionString;

    entityBuilder.Metadata = @"res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl";

    using (Entities context = new Entities(entityBuilder.ToString())) {
        var a = context.MyEntity.First();
    }

Refer to

FYI, you can generate fluent mapping (instead of XML mapping). For this, disable a predefined EntityObject template, enable the DbContext template and set the options:

  • Fluent Mapping=True in the properties of DbContext template
  • Metadata Artifact Processing=Do Not Generate Mapping Files in the properties of EntityContextModel
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.