2012-03-26 7 views
2

sagen bevölkern, ich habe eine partielle Klasse, die eine benutzerdefinierte Eigenschaft ähnlicheWie kann ich benutzerdefinierte Eigenschaften einer Teileinheit in Entity Framework

public partial class Person { 
    public string ImagePath{get;set;} 
} 

enthält und ich bin mit ExecuteStoreQuery<Person> Daten zu ziehen, wo ein gespeicherte Prozedur wird ausgeführt, dass Person und Bild von Person.ImageId = Image.ImageId und bekommt das ImagePath Feld von Bild Tabelle verbindet.

Dies scheint nicht für partielle Klasse zu funktionieren, aber perfekt für die Vererbung.

Allerdings möchte ich in diesem Fall keine vererbte Klasse verwenden, also ... ist es für EF möglich, die Eigenschaften der partiellen Klasse zu kennen und sie zu füllen, wenn executestorequery ausgeführt wird?

Antwort

2

Nein. Wenn die Klasse Person zugeordnet ist, verwendet die EF Ihre Zuordnung in der EDMX-Datei und wird nur zugeordnete Eigenschaften auffüllen, da keine Ihrer benutzerdefinierten Eigenschaften aus der partiellen Klasse Teil Ihrer Zuordnung ist.

Als Workaround erstellen Sie eine neue Klasse PersonView, die nicht zugeordnet wird. Fügen Sie alle Eigenschaften mit demselben Namen wie die Spalten in der Ergebnismenge hinzu und verwenden Sie sie in ExecuteStoreQuery. In diesem Fall hat EF keine Zuordnung für die neue Klasse in EDMX, daher wird die einfachste Zuordnung abgeleitet - sie verknüpft Spalten und Eigenschaften nach Namen.

+1

, die etwas enttäuschend ist, endete ich Erbschaft zu verbrauchen. – walter

+0

Ich verwendete auch die Erbschaft! Danke Walter! Ich denke, das ist wirklich scheiße über EF, aber du hast eine großartige Arbeit geleistet! – Flea

1

Ich weiß, das ein bisschen alt, aber ich stoße gerade jetzt zu diesem Problem und eine Abhilfe gefunden, siehe unten Methode:

public IList<Person> GetPerson() 
{ 
    var mod = (from p in Person 
       join i in Image on p.ImageId equals i.ImageId 
       select new 
       { 
        p.Name, 
        i.ImageId, 
        i.ImagePath 
       }).ToList(); 

    return (from m in mod 
      select new Person 
      { 
       Name = m.Name, 
       ImageId = m.ImageId, 
       ImagePath = m.ImagePath 
      }).ToList(); 
} 
0
public partial class PersonList: Person 
{ 
    public string ImagePath { get; set; } 
} 

List<PersonList> myList = (
    from p in db.Person 
    join i in db.Images on p.ref_image equals i.id 
    select new PersonList() 
    { 
     id = p.id, name = p.name, ImagePath = i.path 
    } 
).ToList<PersonList>(); 

Console.Write(myList[0].id.ToString() + ", " + 
    myList[0].name + " (" + myList[0].ImagePath + ")"); 
Verwandte Themen