0

我正在做一个 WPF(不是 Web)应用程序。

3层

EF 代码优先

UI 层对逻辑层的引用和逻辑层对数据层的引用。

现在,我在数据层中有一个异常,我需要根据异常生成的文本显示一个 MessageBox。

但我不想在数据层中添加对 WindowsBase、PresentationCore 和 PresentationFramework 的引用。

如何从数据层向 UI 层发送文本并显示 MessageBox?

TIA

相关代码:

在 UI 层

    public void guardar(UserControlCliente UCCliente)
    {
        admin.guardarEntidadCliente(UCCliente.textBoxNombre.Text,
                                    UCCliente.textBoxPrimerApellido.Text,
                                    UCCliente.textBoxSegundoApellido.Text,
                                    "Normal",
                                    DateTime.Parse("01/01/2012"),
                                    DateTime.Parse("02/02/2012"),
                                    "obs 1");
    }

    private void buttonAgregar_Click(object sender, RoutedEventArgs e)
    {
        guardar(this);
    }

在逻辑层

    public void guardarEntidadCliente(String nombre, String app1, String app2, String tipo,
                                      DateTime fechaReg, DateTime fechaUltCita, String obs)
    {
        Cliente cliente = new Cliente();
        cliente.Nombre = nombre;
        cliente.Apellido1 = app1;
        cliente.Apellido2 = app2;
        cliente.Tipo = tipo;
        cliente.FechaRegistro = fechaReg;
        cliente.FechaUltimaCita = fechaUltCita;
        cliente.Observaciones = obs;

        ControlDatos cd = new ControlDatos();
        cd.agregarCliente(cliente);
    }

在数据层

    public void agregarCliente(Cliente cliente)
    {
        db.Clientes.Add(cliente);

        try
        {
            db.SaveChanges();
        }
        catch (DbEntityValidationException exc)
        {
            String mensaje = "";

            foreach (var validationErrors in exc.EntityValidationErrors)
                foreach (var validationError in validationErrors.ValidationErrors)
                    mensaje += validationError.ErrorMessage + "\n";

            db.Entry(cliente).State = EntityState.Detached;
            // MessageBox.Show(mensaje, "Se han encontrado errores", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

我需要在 UI 层运行注释行。

4

1 回答 1

0

您可以在 UI 层处理数据层异常。你不是吗?

您可以为此目的使用System.Windows.Application.Current.DispatcherUnhandledException事件。

编辑

根据您的代码,您可以抛出MessageBox特殊类型的异常(例如,MyDataTierException)并使用您的消息对其进行初始化。

在您的 UI 层中,您应该订阅 DispatcherUnhandledException,并根据需要处理它 - 显示 MessageBox,您可以从异常中获取哪些文本。

于 2012-07-27T05:34:30.643 回答