Я хотел бы использовать Entity Framework 4.1 Code-First для создания соединений с моими базами данных, независимо от того, находятся ли они на нашем сервере SQL или DB2.Я чувствую, что я почти на месте, но просто не могу заставить его работать.
Мы используем SQL 2005 и настроили Linked Server для нашего мэйнфрейма 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 в классе указывает на VIEW, который я создал для представления таблицы DB2.Я могу запускать запросы SELECT для этого представления из SQL Management Studio, и он возвращает данные.
Вот используемый контекст данных:
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 \" DB2OLEDB \ "для связанного сервера \" ISERIES \ "не поддерживает требуемый интерфейс транзакции."
Я нашел этот пост, в котором предлагается включить ведение журнала в DB2:
http://www.sqlservercentral.com/Forums/Topic265107-289-1.aspx
Наш администратор DB2 не хочет включать ведение журнала, поэтому я могу как-то отключить транзакции в EF?Или есть что-то еще, что я могу попробовать?
Спасибо!