0

プロジェクトのエンティティフレームワークに戻ってきました。 私のデータベース関係は、ビジネス層だけでなくデータベース上でも適用されます。エンティティフレームワークがDBにレコードを渡します

は、私が作成した新しい子レコードを持つレコードを追加しようとしている外部キー制約を抱えています。

以下は、私のテーブルとコードの簡単な例です。

メインテーブル

  • のId INT(PK)
  • たchildID整数(FK)
  • 名NVARCHAR(50)

子テーブル - イドのINT( pk) - 名前nvarch(50)

private static int addChild(string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBChildTable() { Name = name }; 
      context.DBChildTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static int addMain(int childId, string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBMainTable() { Name = name, ChildId = childId }; 
      context.DBMainTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static void basiceLogic() 
    { 
     int childId = addChild("Child"); 
     addMain(childId, "Main"); 
    } 

私は、エンティティフレームワーク6とSQL Serverバックエンドデータベースを使用しています。

私は、コンテキストにコマンドを追加したり、どこかのデータベースに、メモリ内のエンティティフレームワークからレコードを永続化するためにコードを伝えるために必要なことを、覚えています。

助けが必要ですか?

おかげ

+0

何についてのご質問を?共有するコードは機能するはずです。 – lorond

+0

SaveChanges()はコマンドです:) – marius

+0

こんにちは、私は知っています。主な要素を追加するために2番目のメソッドを実行すると、childIdの外部キー制約について文句を言います。しかし、最初の試みからchildIdを使用してメソッドを再度実行すると、それは機能します。 –

答えて

0

は、この問題にあまりにも長い間過ごし、フォーラムの間で行ったり来たりした後、私は結果をようやく発見しました。

以下は、動作させるために変更しなければならなかったコードですが、今は動作します。 (使用されるコードは、例えば内のコードである)

Iは、コンテキストの廃棄及び再作成を追加する必要がありました。もともと私は、使用して静的メソッドのロジック内のコンテキストを持っていましたが、コンテキストは本当に処分しませんでした。したがって、新しいデータベースレコードは、2番目の挿入内で照会される前にdbに保持されません。

手助けしようとしましたが、私はちょうど包みそこに私の決意を出すだろうと思ったこと、すべてのおかげで、他の誰かがそこにそれはこの素敵な小さな問題を抱えています。

private static Models.Blog.blogEntity context; 
    public static string AddComment(int blogId, string email, string name, string comment) 
    { 
     context = new Models.Blog.blogEntity();     
     string blogName = String.Empty; 

     blogName = Models.Blog.Queries.BlogQuery.NameById(blogId); 

     getUserId(email); 

     createUser(email, name); 

     context.Dispose(); 
     context = new Models.Blog.blogEntity(); 

     createComment(blogId, userId, comment); 

     context.Dispose(); 
     return blogName; 

    } 


    private static void getUserId(string email) 
    { 
     userId = 0; 
     var user = context.users.FirstOrDefault(x => x.emailAddress.Equals(email)); 
     if(user !=null) 
     { 
      userId = user.id; 
     } 
    } 

    public static void createUser(string emailAddress, string name) 
    { 
     if(userId.Equals(0)) 
     { 
      var data = new Models.Blog.user() 
      { 
       emailAddress = emailAddress, 
       name = name, 
       password = "NOT NEEDED", 
       userlevel = 0, 
       created = DateTime.Now 
      }; 
      context.users.Add(data); 
      context.SaveChanges();     
      userId = data.id; 
     }   


    } 

    public static void createComment(int blogId, int userId, string comment) 
    {   

     var data = new Models.Blog.comment() 
     { 
      body = comment, 
      blogId = blogId, 
      createdBy = userId, 
      created = DateTime.Now 
     }; 
     context.comments.Add(data); 
     context.SaveChanges(); 
     commentId= data.id;   
    } 
関連する問題