myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Wie AutoMapper (Entity <--> Model) einbinden um IDataErrorInfo nutzen zu können?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie AutoMapper (Entity <--> Model) einbinden um IDataErrorInfo nutzen zu können?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50


Moritz83 ist offline

Wie AutoMapper (Entity <--> Model) einbinden um IDataErrorInfo nutzen zu können?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nabend,

ich habe folgende Ausgangssituation:

Employee.cs (Model inkl. IDaraErrorInfo)

C#-Code:
using System;
using System.ComponentModel;

namespace Calendar.Models
{
    public class Employee : IDataErrorInfo, INotifyPropertyChanged
    {
        //Employee ID -- Auto Increment (Database)
        public int Id { get; set; }
        private string _firstName;
        public string FirstName
        {
            get => _firstName;
            set
            {
                if (_firstName != null && _firstName != value)
                {
                    _firstName = value;
                }
                NotifyPropertyChanged("FirstName");
            }
        }
        //more code
        #region IDataErorInfo Members
        string IDataErrorInfo.Error
        {
            get
            {
                return null;
            }
        }
        string IDataErrorInfo.this[string propertyName]
        {
            get
            {
                return GetValidationError(propertyName);
            }
        }
        #endregion

        #region Validation
        //more code
        #endregion

        #region INotifyPropertyChanged Members
        //more code
        #endregion
    }
}

EmployeeEntity (Entity Klasse)

C#-Code:
namespace Calendar.Database.Entities
{
    [Dapper.Contrib.Extensions.Table("Employee")]
    public class EmployeeEntity : Entity
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

und mein ViewModel

C#-Code:
namespace Calendar.ViewModels
{
    internal class EmployeeViewModel : INotifyPropertyChanged
    {
        private RelayCommand command;
        private EmployeeEntity employee;
        /// <summary>
        /// Initializes a new instance of the EmployeeViewModel class.
        /// </summary>
        public EmployeeViewModel()
        {
            employee = new EmployeeEntity();
        }
        public EmployeeEntity Employee
        {
            get
            {
                return employee;
            }
        }
        public RelayCommand AddNewEmployee
        {
            get
            {
                this.command = new RelayCommand(SaveChanges);
                return this.command;
            }
        }
        public void SaveChanges()
        {
            var container = ContainerConfig.Configure();
            using (var scope = container.BeginLifetimeScope())
            {
                var test = scope.Resolve<IEmployeeRepository>();
                employee.FirstName = this.Employee.FirstName;
                employee.LastName = this.Employee.LastName;
                test.Add(employee);
            }
        }
    }
}

Sodele, mein Problem ist dass das Model keinerlei Bezug zur Entity (und vice versa) hat und natürlich so auch keine Validation (die im Model definiert wurde) stattfinden kann. Gemäss Internet gibt es AutoMapper und der Code den ich bräuchte sähe etwa so aus

C#-Code:
            var config = new MapperConfiguration(cfg => cfg.CreateMap<Employee, EmployeeEntity>());
            var mapper = config.CreateMapper();

Leider habe ich keinen Plan wie ich das einbauen kann, resp. beim letzten Versuch kam die Fehlermeldung das eine Konvertierung von EmployeeEntity in Employee nicht möglich sei. Der Vollständigkeitshalber noch ein Beispiel einer Textbox:

XML-Code:
<TextBox Width="136" Text="{Binding Employee.FirstName, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

In einem anderen Beispiel das ich gemacht habe ging das einwandfrei, allerdings ohne Entity dazwischen.

PS: Sollten mehr Infos notwendig sein einfach melden
07.10.2019 19:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Modellvalidierungen und Entitätsvalidierungen sind zwei verschiedene paar Stiefel.
Es ist absolut korrekt, dass sich Modell und Entität nicht kennen - gleiches sollte für die Validierungen der Fall sein:
Validierungen in Entitäten prüfen Struktur und ggfls. Relation.
Validierungen am Modell können jedoch auch logische Abhängigkeiten prüfen.

Wenn Du nicht weißt, wie man den AutoMapper integriert, dann schau Dir die Tutorials dazu an.
07.10.2019 20:02 Beiträge des Benutzers | zu Buddylist hinzufügen
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50

Themenstarter Thema begonnen von Moritz83

Moritz83 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habs nun umgedreht, View -> ViewModel -> neuer "Employee" (anstatt neue EmployeeEntity) -> Validation funktioniert -> Mapper -> Entity -> neuer Eintrag in der DB

Danke für den dezenten Hinweis bzgl. Modellvalidierung <-> Entitätsvalidierung


Thread kann zu
07.10.2019 21:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.04.2020 20:32