Ich versuche, die Grundlagen von Entity Framework zu verstehen, und ich habe eine Frage über die Set <> -Methode auf DbContext. Ich verwende ein erstes Datenbankmodell für die folgende Frage.Entity Framework: Wann Set <>
Angenommen, ich habe eine ActivityLog-Datenbank, mit der ich unter anderem eine Nachricht abrufen kann (z. B. eine NLog-Nachricht). Ich konnte einige Code schreiben, alle Nachrichten wie diese herausziehen:
using (var entities = new ActivityLogEntities())
foreach (var log in entities.AcitivityLogs)
Console.WriteLine(log.Message);
Allerdings konnte ich erreichen, auch die gleiche Sache dies zu tun:
using (var entities = new ActivityLogEntities())
foreach (var message in entities.Set<ActivityLog>().Select(entity => entity.Message))
Console.WriteLine(message);
Meine Frage ist, was ist der Unterschied zwischen diesen beiden Aussagen ist? Wann ist es sinnvoller, einen über den anderen zu verwenden? Oder ist das nur eine Frage der persönlichen Vorliebe?
Wenn Sie keine 'ActivityLogs' -Eigenschaft haben, können Sie die' ActivityLogs' -Eigenschaft nicht verwenden. Das mag wie eine nutzlose Antwort erscheinen, aber ich hatte Situationen, in denen ich auf einen 'DbSet' für einen Typ zugreifen musste, der absichtlich keine direkte Eigenschaft für die Entitäten dieses Typs hatte. Dies beantwortet jedoch nicht die Frage, welche zu verwenden ist, wenn beides möglich ist. –
hvd
@hvd vereinbart, aber es ist ziemlich selten zu Typen nicht durch den Kontext verwiesen (und es ist nicht ganz trivial zu tun) –
@LukeMcGregor Betrachten Sie öffentliche Klasse Order {öffentliche ICollection Lines {get; einstellen; }} public class OrderLine {} public class Kontext {public IDbSet Orders {get; privates Set; }} '. Es ist keine zusätzliche Arbeit erforderlich, um dies zu erreichen, und es macht normalerweise keinen Sinn, auf 'OrderLines' ohne die Befehle zuzugreifen. Warum also sollte ich eine 'OrderLines'-Eigenschaft auf der Kontext-Ebene hinzufügen? –
hvd