2

このチュートリアルを介して、最初にEFコードの最新バージョンの基本的なグリップを取得しました- http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part4-csしかし、少し混乱していますある側面について、誰かがそれに光を当てることができるかどうか疑問に思っていますか? 説明するために-「Site」というクラスがあり、「HomePageId」というフィールドが必要であり、そのIDで「SitePage」オブジェクトにマップする必要があります。シンプルに見えますか?しかし、EF が Db と関係を作成するとき、これを理解していないようです。私はそれが間違っていると確信しています-ここにコードがあります:

public class Site
{
    public int SiteId { get; set; }
    public string SiteName { get; set; }
    public string SiteUrlPortion { get; set; }

    // Relationship - SitePages
    public virtual ICollection<SitePage> SitePages { get; set; }

    // Relationship - HomePage
    public int HomePageId { get; set; }
    public virtual SitePage HomePage { get; set; }
}

public class SitePage
{
    public int SitePageId { get; set; }
    public string SitePageTitle { get; set; }
    public string SitePageUrlPortion { get; set; }

    // Relationship - Site
    public int SiteId { get; set; }
    public virtual Site Site { get; set; }       
}

ご想像のとおり、「SitePage」クラスは「Site」への関係を生成します。しかし、両方のテーブルの列に関して私が得たものは、意味をなさないだけでなく、コード側からの関係が期待どおりに機能しません。(たとえば、「サイト」に「HomePageId」を指定すると、サイトの「HomePage」は null になります。

明らかに、これはまだ開発中であるため、ドキュメントに関してはほとんど公開されていませんが、何かアイデアがあるかどうか疑問に思っていますか? プロパティを属性で装飾する必要がありますか? それとも、決して理解できない何かを理解するように求めていますか?!

事前にすべてに感謝します。とにかく辛抱して、明らかに見つけたものは何でも投稿します。ロブ

4

2 に答える 2

1

このように HomePage プロパティを ForeignKey 属性でマークしてみてください

[Foreignkey("HomePageId")]
public virtual SitePage HomePage { get; set; }

流暢な構成を使用することもできますが、それを覚えていないことを忘れないでください

于 2011-01-27T17:08:59.387 に答える
0

おそらくEFの制限です。その EF は、2 つのテーブル間の 1 つの関係のみを処理できます。

テーブル間には、サイト ページのリストとホームページの 2 つの関係があります。

この行を削除してみてください:

public virtual SitePage HomePage { get; set; } 

あなたはまだホームページIDを持っているので、ある意味でこの情報は冗長でした.

于 2011-01-26T11:50:17.757 に答える