0

我做了一个小型图书馆 HomeDAL,在那里我有一个类,具有连接、断开、添加、删除、展示书等功能来管理我的数据库。

现在我在 WPF 中做一个客户端。在MainWindow,我有一个来自我的 HomeDAL 的此类的变量,并且我有一个Button“添加新记录”。单击此按钮将打开一个新窗口,其中我有一些TextBox描述新记录的 es 和一个Button“Make”。单击此“制作”按钮,我关闭了第二个窗口。

我想使用变量HomeDALinMainWindow来运行其中一个函数,但它不起作用,并且应用程序崩溃。

以下是我在第二个窗口中的功能:

private void btnOkClicked(object sender, RoutedEventArgs e)
{
    MainWindow test = (MainWindow)this.Parent;
    Book newBook = new Book()
    {
        Tytul = tbTytul.Text,
        Autor = tbAutor.Text,
        Cena = Int32.Parse(tbCena.Text),
        Przeczytane = tbPrzeczytane.Text
    };
    test.SqlConn.InsertBook(newBook);
    this.Close();
}   

关于我的程序为什么崩溃的任何提示?

4

1 回答 1

0

由于您的应用程序中有一个 DAL 层,我建议基于以下内容

  1. 您的演示层将是MainWindow
  2. DataAccessLayer 将是HomeDAL.

步骤将是

  • 当您像现在一样单击Make按钮时,您将创建一个Book类型的对象并填充值。
  • 您将创建一个HomeDAL类似的对象var dal = new HomeDAL()或使用一些 IOC 之类的Unity.
  • 然后将新创建的 book 对象传递给 DAL,以便 DAL 层可以将数据持久化到数据库中。

注意:页面是为每个请求创建的对象,您不必将数据访问与表示层混为一谈,因为您已经拥有 DAL 层。

在这种情况下,您的示例将如下所示

 private void btnOkClicked(object sender, RoutedEventArgs e)
{
    Book newBook = new Book()
    {
        Tytul = tbTytul.Text,
        Autor = tbAutor.Text,
        Cena = Int32.Parse(tbCena.Text),
        Przeczytane = tbPrzeczytane.Text
    };
    var dal = new HomeDAL(); // pass any initialization parameters if required for the DAL to self initialize.
    var newBookId = dal.CreateBook(newBook);
    // use some mechanism to show the newly created book id to the user or else redirect the user to the grid that shows the books sorted by creation date so that the book he created now will be shown as the first one.

}   

请让我们知道您对此实现的理解并分享您的想法。

于 2013-05-18T17:33:27.507 回答