2011-08-31 49 views
0

我想用實體框架4.1 Code-First建立與我的數據庫的連接,無論它們在我們的SQL服務器還是DB2上。我覺得我快到了,但卻無法實現。實體框架4.1先用SQL中的一個DB2鏈接服務器代碼

我們正在使用SQL 2005,並將鏈接服務器設置爲我們的DB2主機名爲ISERIES DATA。

這裏是我的實體對象:

using System; 
using System.ComponentModel.DataAnnotations; 

namespace HOP.Infrastructure.Model 
{ 
    [Table("EDIHA101_DEMO")] 
    public class EDIHA101 
    { 
     [Key, Column(Order = 0)] 
     public int HABCH { get; set; } 

     [Key, Column(Order = 1)] 
     public int HABSQ { get; set; } 

     public int HAVND { get; set; } 
     public string HACUS { get; set; } 
     public string HAPRD { get; set; } 
     public string HADSC { get; set; } 
     public string HAUOM { get; set; } 
     public string HADCK { get; set; } 
     public string HALDT { get; set; } 
     public string HALTM { get; set; } 
     public int HAQQY { get; set; } 
     public int HACQY { get; set; } 
     public int HAOQY { get; set; } 
     public int HAPON { get; set; } 
     public string HACMT { get; set; } 
     public string HAADT { get; set; } 
     public string HAATM { get; set; } 
     public string HADTP { get; set; } 
     public string HADID { get; set; } 
     public int HAALN { get; set; } 
     public int HAMDL { get; set; } 
     public int HAAS1 { get; set; } 
     public string HARDT { get; set; } 
     public string HARTM { get; set; } 
     public int HARQY { get; set; } 
     public int HANQY { get; set; } 
     public int HADBL { get; set; } 
     public int HARSQ { get; set; } 
     public int HAASN { get; set; } 
     public int HABOL { get; set; } 
     public string HADWG { get; set; } 
     public string HAREV { get; set; } 
     public string HACBY { get; set; } 
     public string HACDT { get; set; } 
     public string HACTM { get; set; } 
     public string HAFDT { get; set; } 
     public string HAFTM { get; set; } 
     public string HACD1 { get; set; } 
    } 
} 

在類表屬性指向我創造了揭露DB2表的視圖。我可以從SQL管理工作室對這個視圖運行SELECT查詢,並返回數據。

這裏是正在使用的數據上下文:

using System.Data.Entity; 

namespace HOP.Infrastructure.Model 
{ 
    public class EDIDataContext : DbContext 
    { 
     public DbSet<EDIHA101> EDIHA101 { get; set; } 

     public EDIDataContext(string connectionString) 
      : base(connectionString) 
     { 

     } 
    } 
} 

下面是與創建方法試圖創建一個新的記錄庫:

using HOP.Core.Interfaces; 
using HOP.Infrastructure.Mappings; 
using HOP.Infrastructure.Model; 
using Domain = HOP.Core.Domain; 
using Model = HOP.Infrastructure.Model; 

namespace HOP.Infrastructure.Repositories 
{ 
    public class ItemRepository : IItemRepository 
    { 
     protected EDIDataContext db; 

     public ItemRepository(EDIDataContext db) 
     { 
      this.db = db; 
     } 

     public void Create(Domain.Item item) 
     { 
      Model.EDIHA101 edi = item.Map(); 

      db.EDIHA101.Add(edi); 
      db.SaveChanges(); 
     } 
    } 
} 

這裏的連接字符串:

<add name="Development_AS400" connectionString="Data Source=SERVER_NAME;Initial Catalog=ISERIES DATA;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 

當我在存儲庫代碼中執行Create方法時,我在db.SaveC上得到這個異常hanges()行:

「請求的操作無法執行,因爲OLE DB提供 \」 DB2OLEDB \ 「爲鏈接服務器\ 」ISERIES \「 不支持 所需的交易界面。」

我發現這個職位,建議在DB2上的日誌轉:

http://www.sqlservercentral.com/Forums/Topic265107-289-1.aspx

我們的DB2數據庫管理員不希望啓用日誌記錄,所以我可以在EF莫名其妙地禁止交易?或者,還有什麼我可以嘗試?

謝謝!

回答

1

是否有任何理由不能直接連接到服務器。您收到的錯誤表明一個不受支持的數據提供者沒有記錄我唯一能想到的其他建議是使用複製而不是鏈接服務器,因爲我不能100%確定鏈接服務器/ oledb或odac直接支持ef4中的開箱即用。 1我知道有一些第三方提供商,例如來自devart的點連接,它們將支持這些提供商,但他們確實需要額外支付費用

+0

根據我的經驗,未加註冊的數據庫僅生成警告,不應導致這類錯誤因爲Ed是簡單的,所以生成簡單的SQL語句 –

+0

我可以直接連接到DB2服務器,但它需要在開發人員和服務器上加載驅動程序。我們剛剛遇到了更新服務器上的驅動程序需要我們更新所有使用該驅動程序的應用程序的問題。我們寧願使用鏈接服務器,因爲我們所有的開發工作都將使用相同的連接方法。 – Dragn1821

+0

如果EF 4.1不支持DB2,Linq To SQL會更好嗎? – Dragn1821

相關問題