0

これはSQL CEまたはEFのいずれかで私の最初の進出であり、誤解が多いかもしれません。私は多くのブログエントリを検索しましたが、まだこの権利を得ることはできません。EFコードで開発されたSQL CEデータベースのmany-to-one ForeignKeys

私には、実行中のレースの登録用のMVC3 Webサイトがあります。私はRaceEventsテーブルとRunnersテーブルを持っています。そこでは各RaceEventには多数のランナーが登録されています。つまり、Many-to-Oneです。私が把握することができますできるだけ多く、

public class RaceEvent 
{ 
    [Required] 
    public int Id { get; set; } 

    public virtual ICollection<Runner> Runners { get; set; } 

} 

    public class Runner 
{ 
    [Required] 
    public int Id { get; set; } 
    [Required] 
    public int RaceEventId { get; set;} 
    [ForeignKey("RaceEventId")] 
    public RaceEvent RaceEvent { get; set; } 
} 

は、働くべき:ここではPOCOさんが取り除か無関係なデータです。私が理解しているように、RaceEventIdはRaceEventの外来キーであることを慣習で理解する必要があります。これで十分ではない場合は、ForeignKey属性を使って説明します。

ただし、動作していないようです。私は新しいランナーを挿入するたびに、RaceEventsテーブルに新しいエントリを挿入しています。また、ServerExplorerのテーブルダイアグラムを見ると、Runnersテーブルダイアグラムの上部に2つの金色のキーが表示されます.1つはIdのプロパティでPrimaryKeyとして識別され、もう1つはRaceEventIdでPrimaryKeyとして識別されませんTable RaceEventsではなく、Table Runnersのプロパティに表示されます。私はIdのゴールドキーを期待していますが、RaceEventIdのシルバーのForeignKeyは期待しています。

FWIW、私は本当にRaceEventのICollectionについては気にしませんが、ブログのエントリーはすべてそれが必要であることを示唆していました。

誰でも私にこの権利を手伝うことができますか?

ありがとうございました。

+0

ちょっとしたことをクリアするために、生成されたテーブルの主キーと外部キーの構造は正しいと思われますが、サーバーエクスプローラは正しく表示していません。 ErikEJのすばらしいSQL Server Compact Toolboxをダウンロードすると、Runner.Idの主キーとRunner.RaceEventIdの外部キーの表構造が正しく表示されます。 –

答えて

0

[OK]を、私は十分に詳細にあなたの質問を読んでいない

申し訳ありません:以下はAnsNet_User & AspNet_Roles Nのためのサンプルです。私たちのプロジェクトでは、これがあなたのやり方を表現する方法です。私はSSMSを見て、それは灰色のキーを表示していませんが、あなたがランナーを追加するたびにレースイベントを作成しません。レースイベントプロパティを設定するランナーを作成するときは、必ず確認する必要がありますが、

public class DB : DbContext 
{ 
    public DB() 
     : base("Data Source=(local);Initial Catalog=DB;Integrated Security=True") 
    { 
    } 

    public IDbSet<Runner> Runners { get; set; } 
    public IDbSet<RaceEvent> RaceEvents { get; set; } 
} 

public class RaceEvent 
{ 
    [Key] 
    public int RaceEventID { get; set; } 


} 

public class Runner 
{ 
    [Key] 
    public int RunnerID { get; set; } 

    [Required] 
    public virtual RaceEvent RaceEvent { get; set; } 

} 

質問がありましたら教えてください。

+0

ありがとうございます。それは基本的に私がやっていたことを確認したJulia Lermanの記事(http://msdn.microsoft.com/en-us/data/hh134698)には、非常に単純なモデルが含まれており、テストプロジェクトに切り出して貼り付けられています。 Server explorerのデータモデルにはまだ2つのゴールドキーがあるので、Sql Ceデータビューア(ErikEJ)の成果物にすぎません。私の実際の問題は、私がコンテクストから切り離されたどこかからRaceEventをコピーしていたという事実と関連していました。私が本当にやる必要があったのは、RaceEventIdを設定し、RaceEventを空のままにしておくことでした。その後、それは働いた。再度、感謝します! –

+0

こんにちはDaveさん、ErikEJさん、ここで私とあなたの自衛隊を分かち合うことができますか?あなたは私のブログの連絡先情報で私にメールを送ることができます。 – ErikEJ

0

DbContextで作成するモデルをオーバーライドする必要があります。 Nの関係

protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
{ 
    dbModelBuilder.Entity<aspnet_Users>().HasMany(a => a.aspnet_Roles).WithMany(b => 
    b.aspnet_Users).Map( 
     m => 
     { 
      m.MapLeftKey("UserId"); 
      m.MapRightKey("RoleId"); 
      m.ToTable("aspnet_UsersInRoles"); 
     }); 

    base.OnModelCreating(dbModelBuilder); 
} 
+0

お返事いただきありがとうございます。 私はAN答えだと思いますが、それは私が探しているものではありません。私が理解しているように、コード・ファーストのポイントは、ドメイン・オブジェクトを正しく指定すると、APIを明示的に使用してモデルを構築する必要がないということです。私が理解しているように、私はドメインオブジェクトが正しく指定されていると思いますが、モデルを正しく取得できていないので、わかりません。 –

関連する問題