Я использую EF 4.1 code first
, и я борюсь с объектом ассоциации и получаю значение, которое было установлено в таблице ассоциации. Я попытался подписаться на пост: Сначала создайте код, многие ко многим, с дополнительными полями в таблице ассоциаций .
Мои таблицы следующие (все в форме множественного числа):
Таблица: Продукция
Id int
Name varchar(50)
Таблица: Технические характеристики
Id int
Name varchar(50)
Таблица: технические характеристики изделия
ProductId int
SpecificationId int
SpecificationValue varchar(50)
Мои родственные классы:
public class Product : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProductSpecification> ProductSpecifications { get; set; }
}
public class Specification : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProductSpecification> ProductSpecifications { get; set; }
}
public class ProductSpecification
{
public int ProductId { get; set; }
public virtual Product Product { get; set; }
public int SpecificationId { get; set; }
public virtual Specification Specification { get; set; }
public string SpecificationValue { get; set; }
}
Мой контекстный класс:
public class MyContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Specification> Specifications { get; set; }
public DbSet<ProductSpecification> ProductSpecifications { get; set; }
protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
}
}
Мой метод хранилища, в котором я выполняю вызов (не уверен, что он правильный):
public class ProductRepository : IProductRepository
{
MyContext db = new MyContext();
public Product GetById(int id)
{
var product = db.Products
.Where(x => x.Id == id)
.Select(p => new
{
Product = p,
Specifications = p.ProductSpecifications.Select(s => s.Specification)
})
.SingleOrDefault();
return null; // It returns null because I don't know how to return a Product object?
}
}
Вот ошибка, которую я получаю:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'ProductSpecification' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �ProductSpecifications� is based on type �ProductSpecification� that has no keys defined.
Что означает, что ключи не определены? Разве ProductId и SpecificationId не будут соответствовать Id продукта и Id спецификации соответственно?
Как бы я вернул один продукт со всеми спецификациями для него?