2013-08-06 2 views
2

У меня возникли проблемы с созданием отношения 1 к многим в моем классе продуктов классу ProductSpecification, который имеет два первичных ключа ProductId, SpecificationId. В классе продуктов не всегда есть класс ProductSpecification. Никто не может решить, как исправить мою проблему. Я получаю сообщение об ошибке с верхним. 1. Я новичок в EF и сначала делаю код, поэтому, если вы знаете, что делать, пожалуйста, оставьте подробное объяснение спасибо.EF несколько ключевых столбцов один для многих

Классы:

public class ProductSpecification 
{  
    [Key] 
    [Column(Order = 1)] 
    public long ProductId { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    public long SpecificationId { get; set; } 


    [ForeignKey("ProductId")] 
    public virtual Product Product { get; set; } 
    [ForeignKey("SpecificationId")] 
    public virtual Specification Specification { get; set; } 
} 


public class Specification 
{ 
    [Key] 
    public long SpecificationId { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification name.")] 
    [DataType(DataType.Text)] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification value.")] 
    [DataType(DataType.Text)] 
    public string Value { get; set; } 

    [ForeignKey("SpecificationId")] 
    public virtual ICollection<ProductSpecification> ProductSpecs { get; set; } 
} 

DataContext:

modelBuilder.Entity<ProductSpecification>().HasKey(x => new { x.ProductId, x.SpecificationId }); 

modelBuilder.Entity<Specification>().HasOptional(x => x.ProductSpecs) 
    .WithMany().HasForeignKey(x => x.SpecificationId); 
+0

Я думаю, вам нужно выбирать между свободно и стилями аннотаций ... Я имею в виду, я не думаю, что вы можете использовать * оба * для определения тех же вещей .. –

+0

Получаете ли вы ту же ошибку, если вы удалите ' Код моделиBuilder'? –

+0

Если я удаляю аннотации данных, я получаю ту же ошибку. Колличество разностей – ONYX

ответ

0

Сделайте ForeignKey Nullable:

общественность долго? SpecificationId {get; задавать; }

общественная виртуальная спецификация? Спецификация {get; задавать; }

Смежные вопросы