2012-02-18 35 views
5

顧客情報を表示したいと思います。 その後、いくつかのクラスを作成しました。 Customer、Delivery、Order、OrderLine、Product、およびrentalDBが含まれます。 rentalDBクラスは、Product、Customer、Order、OrderLine、およびDeliveryの5つのDbSetを設定します。 私はリストビューでUserControllerで作るとき、私は顧客情報を表示することができない、それがエラーを取りますASP.NET MVC 3 EntityTypeにキーが定義されていません

One or more validation errors were detected during model generation: 
System.Data.Edm.EdmEntityType: : EntityType 'OrderLine' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntityType: : EntityType 'Delivery' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �OrderLine� is based on type �OrderLine� that has no keys defined. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Delivery� is based on type �Delivery� that has no keys defined. 

これらのエンティティは、キーを必要となぜ私にはわかりませんか? このエラーは考えられません。 私を助けることができますか?

--UserController.cs--

namespace MvcApplication2.Controllers 
{ 
public class UserController : Controller 
    { 
    // 
    // GET: /User/ 
    rentalDB _db = new rentalDB(); 

    public ActionResult Index() 
    { 
     var model = _db.Customer; 
     return View(model); 
    } 
    } 
} 

--Delivery.csモデルでモデルにおけるfolder--

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 

--OrderLine.csが

namespace MvcApplication2.Models 
{ 
    public class OrderLine 
    { 
    public int basketId { get; set; } 
    public int productId { get; set; } 
    public int quantity { get; set; } 
    } 
} 
をfolder--

答えて

17

エンティティフレームワークを使用するには、すべてのエンティティにキーが必要です。これは、EFがキャッシュ内のオブジェクトを追跡し、更新を基になるデータストアにポストし、関連するオブジェクトをリンクする方法です。

ユアーズすでにあなたがちょうどそれらについてEF伝える必要があり、鍵を持っているオブジェクト:あなたは、リレーショナルをマッピングすることができますNHibernateのか、Entity FrameworkのようなORM(オブジェクトリレーショナルマッパー)フレームワークを使用する場合

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    [Key] public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 
+0

これは特別なケースで私のために働いた。モデルのコードを記述した後にコントローラを追加しましたが、エラーは発生しませんでした。その時点で、モデルは私が望んだものではないことがわかりました。生成されたビューはすべて間違っていたので、コントローラ/ビューを削除しました。その後、モデルを修正してコントローラを追加すると、エラーが表示されました。 1時間ぐるぐる回した後、私は[Key]を追加して機能しました。たぶん、ビジュアルスタジオのMvcの奇妙さやキャッシュ、知らない... – isitdanny

0

をデータベースをオブジェクトモデルに変換するには、メモリ内のオブジェクトとデータベース内のデータの行との間に意味のある関係を作り、そのことがキー(NHibernateが呼び出すID)である必要があり、通常はRDBMSが追跡する自然な方法ですプライマリキーを使用してレコードを作成する(通常、オブジェクトのキーとしてDBプライマリキーを使用します) ==演算子を使用して2つのオブジェクトが等しいかどうかを確認するときは、それらのオブジェクトは同じ参照(またはメモリ内のアドレス)を持ちます。このような平等は、ORMを使用しているときにはあまり役に立ちません。参照の異なるレコードを複数のメモリにロードすることができます。この演劇では、演劇と鍵が中心的な役割を果たしています。

関連する問題