0

私はWPF(Webではない)アプリケーションを実行しています。

3層

EFコードファースト

UI層は論理層を参照し、論理層はデータ層を参照します。

現在、データ層に例外があり、例外によって生成されたテキストに基づいてメッセージボックスを表示する必要があります。

ただし、データ層にWindowsBase、PresentationCore、およびPresentationFrameworkへの参照を追加したくありません。

データ層からUI層にテキストを送信し、メッセージボックスを表示するにはどうすればよいですか?

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

You can handle Data tier exceptions on the UI tier. Aren't you?

You can use for this purpose System.Windows.Application.Current.DispatcherUnhandledException event.

EDIT

According to your code, you can throw an exception (where you want MessageBox to show) of special type (MyDataTierException, for example) and initialize it with your message.

In your UI tier you should subscribe to the DispatcherUnhandledException, and handle it as you want - show the MessageBox, for which text you can take from exception.

于 2012-07-27T05:34:30.643 に答える