2011-10-18 181 views
0

您好我已经通过遵循教程在Silverlight中创建了示例数据库应用程序。我试图在数据库中插入一条记录,但它会引发错误提交操作失败验证。请检查EntitiesInError中Entity.ValidationErrors以获取更多信息。我正在使用DAL的实体框架。我的代码如下。插入记录时发生异常。但Iam不确定在哪个阶段发生异常。 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 =你的类的对象!