2016-07-21 14 views
0

Laden einen Verweis auf eine nicht-abstrakte Navigationseigenschaft Hinzufügen ist in Ordnung:Entity Framework - Verweis auf abstrakte Navigationseigenschaft hinzufügen, ohne

class Entity { 
    int Id { get; set; } 

    Reference Reference { get; set; } 
    Parent Other { get; set; } 
} 

class Reference { 
    int Id { get; set; } 
} 

abstract class Parent { 
    int Id { get; set; } 
} 

class Child : Parent { } 

async Task DbMethod() { 
    using(var context = new XYZDbContext()) { 
     var reference = new Reference { Id = 6 }; 
     context.Attach(reference); 

     var entity = new Entity { 
      Id = 3, 
      Reference = reference, 
     }; 

     context.Add(entity); 

     await context.SaveChangesAsync(); 
    } 
} 

Aber wenn ich die Other Eigenschaft zu einem vorhandenen Datensatz (sagen id setzen wollten 42), kann ich nicht die Klasse Parent (wie es abstrakt ist) instanziieren wie ich mit der Reference Klasse.

Wie würde ich einen Verweis auf eine vorhandene Entität für die abstrakte Klasse Parent hinzufügen? Ich stelle mir vor, dass ich eine OtherId Eigenschaft auf die Entity Klasse hinzufügen könnte und festgelegt, dass, aber ich möchte, wenn möglich

Antwort

0

Verschmutzung der Einheit vermeiden Warum nicht Ihre abstrakten Klasse eine nicht-abstrakte eine

class Parent { 
    int Id { get; set; } 
} 
ändern

So können Sie es jetzt instanziieren und das Verhalten ist das gleiche. Ihre abstrakte Klasse verhält sich nicht wie eine abstrakte, basierend auf Ihrem Beispiel.

+0

Das Beispiel ist der Kürze halber konstruiert. Die Klasse muss abstrakt sein – flipchart

Verwandte Themen