У меня есть 3 таблицы:
CREATE TABLE [dbo].[Items](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL)
CREATE TABLE [dbo].[Params](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[DisplayName] [nvarchar](50) NOT NULL)
CREATE TABLE [dbo].[Params2Items](
[ParamID] [int] NOT NULL,
[ItemID] [int] NOT NULL,
[ID] [int] IDENTITY(1,1) NOT NULL)
и 2 соответствующих класса
public class Item
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<ItemParameter> Params { get; set; }
}
public class ItemParameter
{
public int ID { get; set; }
public string DisplayName { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
Для установки отображения я использую класс EntityTypeConfiguration
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration()
{
HasKey(i => i.ID);
Property(i => i.Name).IsRequired();
HasMany(x => x.Params).WithMany(k => k.Items)
.Map(m => m.ToTable("Params2Items").MapLeftKey("ParamID").MapRightKey("ItemID"))
;
ToTable("Items");
}
}
Когда я пытаюсь перечислить коллекцию Params, я получаю «Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым». исключение
static void Main(string[] args)
{
using (KMCatalog context = new KMCatalog())
{
foreach (var s in context.Items)
{
Console.WriteLine(s.Name);
foreach (var itemParameter in s.Params) //exception here
{
Console.WriteLine(itemParameter.DisplayName);
}
}
}
Console.ReadKey(true);
}
Я использую Ef Code First RC