2017-06-01 7 views
0

Attribut in Entity Framework 6 Code zuerst, welche Attribute kann ich hinzufügen, um mein C# -Objektmodell für ein 1-1 Eltern/untergeordnete Beziehung, während die zugrundeliegende SQL-Tabellenbeziehung eine 1 zu viele ist?In EF6, wie C# -Modell für 1-1-Beziehung über eine 1 zu viele SQL-Tabellenbeziehung

Daten werden für einen bestimmten Kunden in SQL Server 2012

Es hat drei Einheiten, eine WarehouseBase Basisentität, WarehouseCustom kundenspezifische Daten und eine Kundenentität zwischen Daten, die für alle Kunden und Daten teilen.

Das C# Objekt:

  1. Kundenmeinungen Lager XYZ in Browser:

    Warehouse 
    { 
        public Guid ID {get;set;} 
        public string Name {get;set;} 
        public string Note {get;set;} //customer specific data 
    } 
    
    Customer 
    { 
        public Guid ID {get;set;} 
        public string Name {get;set;} 
    } 
    

    Ein Kunde Benutzer diesen Workflow verwenden würde. Es sollte Lager XYZ freigegebene Daten (ID, Name) und die kundenspezifischen Daten (Hinweis) zurückgeben.

  2. Kunden bearbeiten die Notiz ein und klickt Schaltfläche
  3. Hinweis speichern sollte

Ein Admin würde bearbeiten und speichern Sie die WarehouseBase Daten (Name), aber nicht die kundenspezifischen Daten in der Datenbank gespeichert werden.

SQL-Tabellen:

WarehouseBase 
    ID : Guid 
    Name: Nvarchar (255) 

WarehouseCustom 
    ID : Guid 
    WarehouseBaseID: GUID 
    CustomerID : GUID 
    Note : Nvarchar (255) 

Customer 
    ID : Guid 
    Name : Nvarchar (255) 

Das System mehrere verschiedene Kunden gleichzeitig anbieten können per Webbrowser Frontend eine Verbindung zu einem WebAPI-Server verfügt. Der Server verwendet EF6/C#, um auf einen SQL Server zuzugreifen.

Welche Attribute können dem C# -Modell hinzugefügt werden?

Schon gesehen:

  1. One Beziehung: http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx
  2. Wie man viele abzufragen und spezifische Kinder Daten laden: Entity Framework include filter child collection
+0

Unsere Anwendung wird 50+ dieser Arten von Basis/benutzerdefinierten Einheiten haben; Es würde also helfen, die Hand-Codierung einer Abfrage mit 2 Abfragen und die Speicherung von 1 Abfrage für jede Entität zu vermeiden. – testx

+0

Für neue Kunden existiert möglicherweise kein untergeordnetes Objekt für Note. – testx

+0

Der Benutzer sucht zuerst nach Warehouse-Namen (Basis-Entitätsdaten), um den Warehouse-Namen zu suchen und zu laden. Eine Suche nach einer Warehouse-Notiz oder einer Verknüpfungstabelle fügt mehr Komplexität hinzu als nur zwei Abfragen zum Lesen eines Warehouse und eine Abfrage zum Aktualisieren der Warehouse-Notiz. – testx

Antwort

0

die C#

Warehouse { 
    public Guid ID {get;set;} 
    public string Name {get;set;} 

    public ICollection<WarehouseCustom> CustomersNotes {get; set;} 
} 

Customer { 
    public Guid ID {get;set;} 
    public string Name {get;set;} 

    public ICollection<WarehouseCustom> WarehouseNotes {get; set;} 
} 

WarehouseCustom { 
    public Guid ID {get;set;} 
    public string Note {get;set;} //customer specific data 

    public virtual Warehouse {get; set;} 
    public virtual Customer {get; set;} 
} 
sein sollte

So kann ein Kunde alle seine Notizen zu einem Krieg zugreifen EHouses und ein Lagerverwalter können auf alle Notizen auf diesem Lager zugreifen.

Um zu verhindern, dass ein Kunde in den Kundennotizen eines Lagers navigiert, müssen Sie auf die Materialisierung der Daten achten.

using (AppContext ctx = new AppContext()) { 
    return ctx.Customers. 
     Include(x => x.WarehouseNotes.Select(y => y.Wharehouse)). 
     Where(x => x.ID == oneID). 
     ToList(); 
} 

Das ist: VERWENDEN SIE KEINE LAST.

Im Codebeispiel laden Sie nur, was der Kunde sehen sollte.

Idealerweise sollte tou einen DTO-Typ verwenden.

BTW: Sie brauchen keine ID für WarehouseCustom (außer wenn Sie mehrere Kundennotizen für ein Lagerhaus haben können). Sie können einen komplexen Schlüssel verwenden, der aus der Warehouse-ID und der Kunden-ID besteht.

IMHO, diese letzte Einschränkung wird erzwingen, was Sie eine 1 zu 1 Beziehung nennen.

+0

Funktioniert, wenn der Kunde eine Notiz für ein Lager hat, aber nicht für den Fall, wo der Kunde möchte ein Lager ohne eine Notiz finden und dann eine Notiz zum Lager hinzufügen. – testx

+0

Danke tschmit007 – testx

Verwandte Themen