2017-07-16 1 views
0

私はEntityフレームワークを使用してAsp.net MVCでコードの最初のアプローチを使用しています。 私はProductクラスとUserProductクラスの2つの異なるクラスを使用しているCartクラスを持っています。それらは仮想オブジェクトです。つまり、遅延ロードによって使用されます。続きクラス内の2つのオブジェクトを遅延ロードする - 1つがロードされ、残りがnullのまま残ります。

は私の3クラスです:

public class Cart 
{ 
    [Key] 
    public int Id { get; set; } 
    public string CartId { get; set; } 
    public int ProductId { get; set; } 
    public int UserProducts_Id { get; set; } 
    public int Count { get; set; } 
    public System.DateTime DateCreated { get; set; } 
    public virtual Product Product { get; set; } 
    public virtual UserProducts UserProducts { get; set; } 
} 

[Table("dbo.Product")] 
public class Product 
{ 
    [Key] 
    public int ProductID { get; set; } 
    public int ProductTypeID { get; set; } 
    public string Name { get; set; } 
    public string SKU { get; set; } 
    public string Description { get; set; } 
    public string SpecTitle { get; set; } 
    public decimal Price { get; set; } 
    //public Int16 Published { get; set; } 
    public bool Deleted { get; set; } 

    public int SiteId { get; set; } 
    public int UserId { get; set; } 

} 


[Table("dbo.UserProducts")] 
public class UserProducts 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ArtworkId { get; set; } 
    public int ProductId { get; set; } 
    public decimal ProductPrice { get; set; } 
    public string ProductDescription { get; set; } 
    public string CreatedBy { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public string ModifiedBy { get; set; } 
    public DateTime? ModifiedOn { get; set; } 
    public bool IsActive { get; set; } 
    public string ArtworkPath { get; set; } 
    public int UserId { get; set; } 
    public int SiteId { get; set; } 
} 

問題は、私は、データベースからカートをロードする際に製品のオブジェクトがロードされていること、です。しかし、UserProductsオブジェクトはロードされず、nullのままです。以下はその呼び出しです。私も試みた。インクルード(p => p.UserProducts)、それも動作しません。

storeDB.Carts.Where(
      cart => cart.CartId == ShoppingCartId).ToList(); 

これはEFのId命名規則と関係していますか? bcz ProductクラスはProduct IdとしてPKを持ち、CartクラスではFKをProductIdという名前にします。しかし、UserProductsの場合、calssにはIdという名前のPKしかありませんが、CartクラスのFKにはUserProducts_Idという名前が付けられていますか?

+1

はい、これはEF命名規則によって発生します。 [Entity Framework manual Database Change](https://stackoverflow.com/questions/45016287/entity-framework-manual-database-change/45017334#45017334)を参照してください。関連する質問は異なって記述されているため、これを重複としてマークしますが、その答えはあなたの質問にも適用されます。 –

+0

@TahirRauf "public int UserProducts_Id"の代わりに "public int UserProductsId"を使用しようとしました – hasan

答えて

1


public int UserProducts_Id { get; set; }の代わりにpublic int UserProductsId { get; set; }を使用できますか?

プライマリテーブルのクラス名にIdを追加すると、Entity Frameworkはそれを自動的に外部キーと見なします。 Idでアンダースコアを使用すると、フレームワークはそれを外部キーのプロパティとして認識しません。

public class Cart 
{ 
    [Key] 
    public int Id { get; set; } 
    public string CartId { get; set; } 
    public int ProductId { get; set; } 
    public int UserProductsId { get; set; } 
    public int Count { get; set; } 
    public System.DateTime DateCreated { get; set; } 
    public virtual Product Product { get; set; } 
    public virtual UserProducts UserProducts { get; set; } 
} 
+0

ありがとうございました。クイックコンセプトをありがとう。私はEF大会でそれを見逃していました。 :) – TahirRauf

+0

あなたは歓迎です:) – hasan

関連する問題