1

2 つのモデルと両方のシード値の間に 1 対多の関係を作成したいと考えています。EFが「多くの」モデルをコレクションにキャストしようとしているというエラーが表示されますが。2 つのモデルは次のとおりです。

製品 (多数):

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; }
}

市場 (1):

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 のおかげで、Product の「ForeignKey」属性を削除したところ、機能するようになりました。

4

1 に答える 1

3

あなたが宣言した製品と市場の関係は、一対多ではありません。ForeignKeyProduct クラスのキーである「Id」プロパティを使用して、Market プロパティに属性があります。つまり、Market と Product の両方が同じ ID を持つ必要があります。

製品に追加の「MarketID」プロパティが必要であり、そのプロパティを として使用しますForeignKey。または、ForeingKey属性をまったく使用しないでください

于 2013-06-27T20:04:16.067 に答える