簡體   English   中英

如何使用 DevArt edml 文件並開始連接?

[英]How to work with an DevArt edml file and start a connection?

我正在使用最新的 DevArt Oracle 版本並創建了一個連接到我的 Oracle 12 數據庫的 EDML 文件,並使用 db first 方法獲取模型。

我遵循了這個方法: https://www.devart.com/entitydeveloper/docs/

所以我有我的上下文和我的 model 自動生成:

    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”。 我用谷歌搜索了這個,我發現可能是 EF6 正在嘗試獲取默認連接,而不是與 DevArt 的 oracle 連接......我嘗試以不同的方式使用 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();
    }

我不應該那樣做...

如果您將 XML 映射與 Devart Entity Model (*.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 模板並設置選項:

  • Fluent Mapping=True 在 DbContext 模板的屬性中
  • 元數據工件處理=不要在EntityContextModel的屬性中生成映射文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM