2013-03-09 7 views
6

Weil mein Englisch ist nicht gut, ich gerade auf den Punkt. Warum Unternehmen in der Datenbank aufzeichnen neuen Datensatz erstellen und Kundendatensatz auf neue Firmendatensatz beziehen? Vielen Dank für Hilfe :)Entity Framework - Duplizieren Eltern (one), wenn neue Kinder (viele)

public class Company : EntityBase 
{ 
    public string Name { get; set; } 

    public List<Customer> Customers { get; set; } 
    public List<Invoice> Invoices { get; set; } 
} 

public class Customer : EntityBase 
{ 
    public string Name { get; set; } 

    public Company Company { get; set; } 
    public List<Card> Cards { get; set; } 
} 

public class EFRepositoryBase<TEntity> where TEntity : class, IEntity, new() 
{ 
    protected IUnitOfWork UnitOfWork { get; set; } 

    protected BenzineFleetContext Context 
    { 
     get { return (BenzineFleetContext) UnitOfWork; } 
    } 

    public virtual DbSet<TEntity> GetDbSet<TEntity>() where TEntity : class 
    { 
     return Context.Set<TEntity>(); 
    } 

    public virtual void Add(TEntity entity) 
    { 
     GetDbSet<TEntity>().Add(entity); 
    } 

    public virtual void SaveChanges() 
    { 
     Context.SaveChanges(); 
    } 
} 

    //Save 

var cus = new Kunden {Unternehmen = SelectedCompany}

_srv.Add(cus); 
    _srv.SaveChanges(); 
+0

Es gibt einige Beziehung und andere Dinge, können ... Können Sie klar angeben, was genau Sie tun möchten? –

+0

Ich möchte einen neuen Kunden erstellen, customer.Company = SelectedCompany aus der Datenbank – yovierayz

Antwort

11

Wenn Sie Entität über DbSet<T>.Add Methode hinzufügen, dann Einheit und all seinen Einrichtungen verwiesen, die nicht im Zusammenhang wird jedoch in ChangeTracker als Added markiert. Deshalb neue Unternehmen hinzugefügt wird (sieht aus wie Unternehmen ist nicht auf Kontext gebunden):

var customer = new Customer {Company = SelectedCompany} 
context.Customers.Add(customer); 
// at this point customer state will be Added 
// company state also will be Added 
context.SaveChanges(); 

ein solches Verhalten zu vermeiden, legen Unternehmen Zusammenhang vor neuen Kunden hinzufügen:

var customer = new Customer {Company = SelectedCompany} 
context.Companies.Attach(SelectedCompany); 
context.Customers.Add(customer); 
// at this point customer state will be Added 
// company state will be Unchanged (if you haven't change it) 
context.SaveChanges(); 

Ein anderer Weg ist die Aufrechterhaltung Staaten manuell:

var customer = new Customer {Company = SelectedCompany} 
context.Customers.Add(customer); 
context.Entry(SelectedCompany).State = EntityState.Unchanged; 
// at this point customer state will be Added 
// company state will be Unchanged 
context.SaveChanges(); 
+0

Aber in anderen Methode, ich füge Karte beziehen sich auf den gleichen Kunden mit hinzufügen Kunden verweisen Firma, es ist nicht erstellen einen doppelten Datensatz. – yovierayz

+0

@yovierayz sieht aus wie Datensatz ist in Zusammenhang in diesem Fall –

+1

es stellt sich heraus, das Problem war in der Ergänzung der Firmenliste, ich ein neues Objekt zweimal Unternehmen Liste erstellen. Aber der Weg, danke für Ihre Hilfe, ich werde Ihr Beispiel anwenden, um meinen Code zu verbessern :) – yovierayz

-2

Sie können this und this für alle Ihre grundlegenden CRUD sehen (erstellen lesen Ändern löschen) Operation im Entity-Framework. Es wird dir sehr hilfreich sein. Auch können Sie kurz den Fremdschlüssel Funda und eine zu viele Beziehungen verstehen.

Verwandte Themen