【发布时间】:2011-08-31 13:25:55
【问题描述】:
我想使用 Entity Framework 4.1 Code-First 来建立与我的数据库的连接,无论它们是在我们的 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; }
}
}
类的 Table 属性指向我创建的用于公开 DB2 表的 VIEW。我可以从 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)
{
}
}
}
这里是使用 Create 方法尝试创建新记录的存储库:
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.SaveChanges() 行上得到了这个异常:
"由于 OLE DB 无法执行请求的操作 链接服务器 \"ISERIES\" 的提供程序 \"DB2OLEDB\" 不支持 所需的交易接口。”
我发现这篇文章建议在 DB2 上打开日记功能:
http://www.sqlservercentral.com/Forums/Topic265107-289-1.aspx
我们的 DB2 DBA 不想启用日记功能,那么我可以在 EF 中以某种方式禁用事务吗?或者,还有什么我可以尝试的吗?
谢谢!
【问题讨论】:
标签: db2 entity-framework-4.1 linked-server