2016-05-27 13 views
0

ASP.NET MVCアプリケーションでは、AspNetUsersテーブルからRecipesテーブルに1対多のリレーションシップを追加しようとしています。Entity Framework - AspNetUsersからカスタムテーブルへのリレーションシップを追加できません

public class ApplicationUser : IdentityUser 
{ 
    public List<Recipe> Recipes { get; set; } 

    <omitted for brevity> 
} 



public class Recipe 
{ 
    <other properties omitted> 

    public virtual ApplicationUser User { get; set; } 
    public string UserId { get; set; } 
} 


public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public DbSet<Recipe> Recipes { get; set; } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
     Database.SetInitializer<ApplicationDbContext>(null); 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

:これは私がモデルを定義しています方法です

移行を実行した後RecipesからAspNetUsersに関係がありますが、Recipes

AspNetUsersから1がありません私は持っています:

  • はレシピテーブルがコンソールでSQL Management Studioを(それがない)
  • は(私はpably間違っ検索をやっている)同様の問題のためにグーグルで試してみました
  • 実行Update-Database
+1

あなたは「'Recipe'へ' User'から1が存在しない」とはどういう意味ですか?要件は何ですか? – Ghukas

+0

@Ghukas 'AspNetUsers'テーブルから' Recipes'テーブルへの1対多の関係が必要です... – NRKirby

+1

Code-Firstを使用すると、 'public override void Up()'関数の移行コードが表示されます。 PK/FKに関する情報が含まれているテーブルのコードがあることを確認できますか? – Ghukas

答えて

2

@NRKirby、私はあなたが上記の投稿したまったく同じコードを使用し、ここでは、データベースのように見えるものですしている:

enter image description here

私はRecipeモデルでIdプロパティを追加しました。私はあなたが省略されたプロパティでそれを持っている場合は分かりません。移行から のコードは以下の通りです:DBの結果は何をしたいです

public partial class InitalCreate : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.Recipes", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        UserId = c.String(maxLength: 128), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.AspNetUsers", t => t.UserId) 
      .Index(t => t.UserId); 

     CreateTable(
      "dbo.AspNetUsers", 
      c => new 
       { 
        Id = c.String(nullable: false, maxLength: 128), 
        Email = c.String(maxLength: 256), 
        EmailConfirmed = c.Boolean(nullable: false), 
        PasswordHash = c.String(), 
        SecurityStamp = c.String(), 
        PhoneNumber = c.String(), 
        PhoneNumberConfirmed = c.Boolean(nullable: false), 
        TwoFactorEnabled = c.Boolean(nullable: false), 
        LockoutEndDateUtc = c.DateTime(), 
        LockoutEnabled = c.Boolean(nullable: false), 
        AccessFailedCount = c.Int(nullable: false), 
        UserName = c.String(nullable: false, maxLength: 256), 
       }) 
      .PrimaryKey(t => t.Id) 
      .Index(t => t.UserName, unique: true, name: "UserNameIndex"); 

     // Some other table definitions... 
    } 

    public override void Down() 
    { 
     // ... 
     DropForeignKey("dbo.Recipes", "UserId", "dbo.AspNetUsers");    
     // ... 
     DropIndex("dbo.AspNetUsers", "UserNameIndex"); 
     DropIndex("dbo.Recipes", new[] { "UserId" }); 

     // ... 
     DropTable("dbo.AspNetUsers"); 
     DropTable("dbo.Recipes"); 
    } 
} 

場合、私はあなたが間違ったコマンドの少なくとも一つを実行していると仮定します。

  • Enable-Migrations:プロジェクトのコードファーストマイグレーションを有効にします。
  • 追加マイグレーション:保留中のモデルのマイグレーションスクリプトを足場で修正
    変更。
  • 更新データベース:
    データベースに保留中の移行を適用します。
+0

このような詳細な答えをありがとう。移行コードで、AspNetUsersからRecipesまでの関係を説明していますか? – NRKirby

+1

'.ForeignKey(" dbo.AspNetUsers "、t => t.UserId)'行にあります。 – Ghukas

1

任意のエンティティに存在確認関連したいと思っているのは、同じモデルの一部でなければなりません。

コンテキストクラスを見つけて、新しいタイプのEntitySetを追加します。

+0

返信ありがとうございます - 私はあなたの提案をすでに行っていますか? – NRKirby

+1

レシピモデルにApplicationUserタイプのプロパティがありますか?それが関係を作成する前にそれを見る必要があるかもしれません。レシピテーブルにユーザを指すIDを作成しなかった場合は正しくありません。 –

+0

こんにちは、私は元の投稿を更新しました – NRKirby

関連する問題