0

最初にコードを使用してサンプル プロジェクトを開始し、外部キー制約を持つエンティティから NULL 値を取得しました。

私のモデル:

public class CustomerItem
{
     [Key]
     public int Id { get; set; }
     public int Name{get;set;}
     public virtual IEnumerable<OrderItem> Order { get; set; }
}

public class OrderItem
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("CustomerItem")]
    public int CustomerId { get; set; }
    public virtual CustomerItem CustomerItem { get; set; }
}

値を取得する dataaccess linq クエリ:

public IEnumerable<CustomerItem> GetOrdersFromCustomerItem(int id)
{
    return (from c in this.dax.Customer
           where c.Id.CompareTo(id) == 0
           select c).AsEnumerable().ToList();
}

このクエリは NULL オーダーを返すので、このクエリには間違いがあると思います。このエンティティを外部キー テーブルと結び付けるにはどうすればよいですか?

ありがとう

すべての顧客 (およびその注文) を取得するようにクエリを更新しました。

public IEnumerable<CustomerItem> GetAllCustomers()
{
    return (from c in this.dax.Customer
            select new 
            {
                //Properties
                OrderItem = c.OrderItem
            }).AsEnumerable.ToList().select(s => new CustomerItem
            {
               //Properties
               OrderItem = s.OrderItem, //here I got the exception I wrote in comment
            }).ToList();
}
4

2 に答える 2

2

変化する:

public virtual IEnumerable<OrderItem> Order { get; set; }

に:

public virtual ICollection<OrderItem> Order { get; set; }

IEnumerable<>読み取り専用メソッドを公開しているため、基本Entity Framework的に無視しています。プロパティをデータベースにマップするには、プロパティが書き込み可能なコレクション型である必要があります。

IEnumerableただし、プロパティを公開して、実際には である をgetter返すことは非常に一般的です。backing-fieldIList/ICollection

于 2013-05-19T13:15:12.050 に答える
0

以下を変更する必要があります。

public IEnumerable<CustomerItem> GetOrdersFromCustomerItem(int id)
{
  // You must select CustomerItem not a customer in the previous linq query.
  return (from c in this.dax.Customer
       where c.Id.CompareTo(id) == 0
       select new CustomerItem{

        }).AsEnumerable().ToList();
}
于 2013-05-18T23:52:07.883 に答える