[英]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 模板並設置選項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.