2011-10-18 13 views
0

こんにちは私はチュートリアルに従って、Silverlightでサンプルデータベースアプリケーションを作成しました。 DBにレコードを挿入しようとしていますが、エラーがスローされます送信操作が検証に失敗しました。詳細については、EntitiesInErrorの各エンティティのEntity.ValidationErrorsを調べてください。私はDAL用のEntityフレームワークを使用しています。私のコードは以下の通りです。レコードを挿入する際に例外が発生します。しかし、どの段階で例外が発生するかはわかりません。 RecordInsertPage.csはSilverlight 4 RIAサービスの問題

public partial class BookRegistaeration : ChildWindow 
    { 
     public Book newBook { get; set; } 
     public BookRegistaeration() 
     { 
      InitializeComponent(); 
      newBook = new Book(); 
      AddBookForm.CurrentItem =AddBookForm; 
      AddBookForm.BeginEdit(); 
     } 

    private void OKButton_Click(object sender, RoutedEventArgs e) 
    { 
     AddBookForm.CommitEdit(); 
     this.DialogResult = true; 

    } 

    private void CancelButton_Click(object sender, RoutedEventArgs e) 
    { 
     newBook = null; 
     AddBookForm.CancelEdit(); 
     this.DialogResult = false; 

    } 
} 

Service.csページ

public class OrganizationService : LinqToEntitiesDomainService<LibraryEntities1> 
    { 

    public IQueryable<Book> GetBooks() 
    { 
     return this.ObjectContext.Books.OrderBy(e => e.BookId); 
    } 

    public void InsertBook(Book book) 
    { 
     //book.Title = "Hello book"; 
     //book.Author = "Ali"; 
     //book.Category = "Humanity"; 

      if ((book.EntityState != EntityState.Detached)) 
      { 
       this.ObjectContext.ObjectStateManager.ChangeObjectState(book, EntityState.Added); 
      } 
      else 
      { 
       this.ObjectContext.Books.AddObject(book); 
      } 


    } 

    public void UpdateBook(Book currentBook) 
    { 
     this.ObjectContext.Books.AttachAsModified(currentBook, this.ChangeSet.GetOriginal(currentBook)); 
    } 

    public void DeleteBook(Book book) 
    { 
     if ((book.EntityState != EntityState.Detached)) 
     { 
      this.ObjectContext.ObjectStateManager.ChangeObjectState(book, EntityState.Deleted); 
     } 
     else 
     { 
      this.ObjectContext.Books.Attach(book); 
      this.ObjectContext.Books.DeleteObject(book); 
     } 
    } 
} 



private void LibraryDataSource_SubmittedChanges(object sender, SubmittedChangesEventArgs e) 
     { 
      if (e.HasError) 
      { 
       MessageBox.Show(string.Format("Changes were not saved: {0}", e.Error.Message)); 
       e.MarkErrorAsHandled(); 
      } 
      submitButton.IsEnabled = true; 

     } 
    void addBook_Closed(object sender, EventArgs e) 
    { 
     BookRegistaeration book = (BookRegistaeration)sender; 
     if (book.newBook != null) 
     { 
      OrganizationContext _OrganizationContext = (OrganizationContext)(LibraryDataSource.DomainContext); 
      _OrganizationContext.Books.Add(book.newBook); 
      LibraryDataSource.SubmitChanges(); 
     } 
    } 

答えて

0

次のことができるようにする必要がありそのためその例外オブジェクトを検査するために、あなたのSubmittedChangesイベントにブレークポイントを入れて、例外メッセージが示すようにやってみファイルEntitiesInErrorの各エンティティのEntity.ValidationErrorsを参照してください。

これは、追加しようとしているオブジェクトのどのフィールドが検証チェックに失敗したかを示すはずです。ヌルにはできないフィールドにはnullデータが含まれている可能性があります。文字列プロパティが空ではないことがわかります。

フォームに追加するオブジェクトが適切に入力されていることを確認してください。CommitEditが呼び出される前にブレークポイントを配置し、オブジェクトの状態を調べることもできます。

0

私はこの行を理解していません!

AddBookForm.CurrentItem = AddBookForm;

なぜあなたはこれを書きましたか?

それがこの

AddBookForm.CurrentItem =あなたのクラスオブジェクトのようなものでなければなりません!

関連する問題