如何使用 DevArt edml 文件并启动连接?

问题描述 投票:0回答:1

我正在使用最新的 DevArt Oracle 版本,并创建了一个 EDML 文件,该文件连接到我的 Oracle 12 数据库并使用数据库优先方法获取模型。

我遵循了这个方法: https://www.devart.com/entitydeveloper/docs/

所以我有我的上下文和自动生成的模型:

    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; }
}

现在我尝试让它在另一个项目的主程序中工作(只是一个带有 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();

所以现在我收到错误“不支持关键字用户 ID”。我用 google 搜索了一下,发现 EF6 可能正在尝试获取默认连接,而不是 Oracle 与 DevArt 的连接。我尝试以不同的方式使用 app.config 但没有帮助。

现在我尝试创建自己与 DevArt.Data.Oracle 提供程序的连接,如下所示:

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

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

这工作正常,所以连接字符串没问题,但我仍然无法将这两个放在一起。我尝试重载构造函数,以便可以放入我的连接:

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

    }

然后我就收到错误了

         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        throw new UnintentionalCodeFirstException();
    }

我不应该那样做...

oracle entity-framework ef-database-first devart
1个回答
1
投票

如果您将 XML 映射与 Devart 实体模型 (*.edml) 一起使用,请尝试以下代码:

    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();
    }

参考

仅供参考,您可以生成流畅的映射(而不是 XML 映射)。为此,禁用预定义的 EntityObject 模板,启用

DbContext 模板 并设置选项:

    DbContext 模板属性中 Fluent Mapping=True
  • 元数据工件处理=不在 EntityContextModel 的属性中生成映射文件
© www.soinside.com 2019 - 2024. All rights reserved.