Я хочу создать отношение «один ко многим» между двумя моделями и исходными значениями для обеих. Хотя я получаю сообщение об ошибке, что EF пытается преобразовать модель "многие" в коллекцию. Две модели следующие:

Товар (много):

public class Product
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string ModelNum { get; set; }
    [ForeignKey("Id")]
    public virtual Market Market { get; set; }
    public string Brand { get; set; }
    public string Type { get; set; }
    public bool IsSuggestedProduct { get; set; }
}

Рынок (Один):

public class Market
{
    [Key]
    public int Id { get; set; }
    public string Code { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

Попытка посеять:

        Market market = new Market() { Code = "US" };
        market.Products = new List<Product>()
        {
            new Product
            {
                ModelNum = "modelNum1",
                Brand = "Brand1",
                Market = market,
                IsSuggestedProduct = false
            },
            new Product
            {
                ModelNum = "modelNum2",
                Brand = "Brand2",
                Market = market,
                IsSuggestedProduct = true,
                Type = "Type1"
            }
        };
        context.Markets.AddOrUpdate(m => m.Id, market);
        context.SaveChanges();

Это в «AddOrUpdate», где я получаю следующую ошибку:

System.InvalidCastException was unhandled by user code
  HResult=-2147467262
  Message=Unable to cast object of type 'System.Collections.Generic.List`1[TestAPI.Models.Product]' to type  'TestAPI.Models.Product'.
  Source=System.Data.Entity

ОБНОВЛЕНИЕ: благодаря jure я удалил атрибут "ForeignKey" в продукте, и теперь он работает.

1
Channafow 27 Июн 2013 в 22:18
2
Я не думаю, что ваша модель - «Один ко многим». у вас есть атрибут ForeignKey в свойстве Market, используя свойство «Id», которое является ключевым в Product. Это означает, что и у Market, и у продукта должен быть один и тот же идентификатор. Я думаю, вам нужно дополнительное свойство MarketID в продукте и использовать это свойство в качестве ForeignKey. Или вообще не используйте атрибут ForeingKey.
 – 
Jurica Smircic
27 Июн 2013 в 22:47
Я удалил атрибут «ForeignKey», и это сработало. Спасибо
 – 
Channafow
27 Июн 2013 в 23:25
Рад, что это сработало. Я тоже разместил комментарий как ответ.
 – 
Jurica Smircic
28 Июн 2013 в 00:04

1 ответ

Лучший ответ

Отношения между продуктом и рынком, как вы заявили, не «один ко многим». У вас есть атрибут ForeignKey в свойстве Market с использованием свойства Id, которое является ключевым в классе Product. Это означает, что и у Market, и у продукта должен быть один и тот же идентификатор.

Вам нужно дополнительное свойство MarketID в Продукте и используйте это свойство как ForeignKey. Или вообще не используйте атрибут ForeingKey

3
Jurica Smircic 28 Июн 2013 в 00:04