Entity Framework 4: Wie finden Sie die Primärschlüssel?
Ich versuche, erstellen Sie eine generische Methode mit EF4 zu finden, die den Primärschlüssel des Objekts.
Beispiel
public string GetPrimaryKey<T>()
{
...
}
Geben mehr info ich arbeite aus der Tekpub StarterKit und unten ist die Klasse, die ich versuche zum laufen zu bringen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Objects;
using System.Data.Objects.ELinq;
using System.Data.Linq;
using Web.Infrastructure.Storage.EF4;
namespace Web.Infrastructure.Storage {
public class EFSession:ISession {
PuzzleEntities _db;//This is an ObjectContext
public EFSession() {
_db = new PuzzleEntities();
}
public void CommitChanges() {
_db.SaveChanges();
}
///<summary>
///Gets the table provided by the type T and returns for querying
///</summary>
private ObjectSet<T> GetObjectSet<T>() where T:class {
return _db.CreateObjectSet<T>();
}
private T GetByPrimaryKey<T>() where T: class
{
.....
}
public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T: class{
foreach (T item in All<T>().Where(expression))
{
GetObjectSet<T>().DeleteObject(item);
}
}
public void Delete<T>(T item) where T : class {
GetObjectSet<T>().DeleteObject(item);
}
public void DeleteAll<T>() where T : class {
foreach(T item in All<T>())
{
GetObjectSet<T>().DeleteObject(item);
}
}
public void Dispose() {
_db.Dispose();
}
public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T:class {
return GetObjectSet<T>().SingleOrDefault(expression);
}
public IQueryable<T> All<T>() where T : class {
return GetObjectSet<T>().AsQueryable();
}
public void Add<T>(T item) where T : class {
GetObjectSet<T>().AddObject(item);
}
public void Add<T>(IEnumerable<T> items) where T : class {
foreach (T item in items)
{
GetObjectSet<T>().AddObject(item);
}
}
public void Update<T>(T item) where T : class {
//nothing needed here
}
}
}
InformationsquelleAutor runxc1 Bret Ferrier | 2010-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich war schließlich in der Lage, um herauszufinden, wie diese zu arbeiten. Ich wünschte, ich hätte nicht verloren der link zu dem blog Las ich Letzte Nacht, als ich nicht den code schreiben.
Ich hoffe, dies hilft jemand anderes. Alles was ich sagen kann ist, dass es ein wenig klarer, wie dies zu tun.
Das war es dann. Gut zu finden
Technisch nicht gültig, da dies falsche Ergebnisse zurück, wenn es einen zusammengesetzten Primärschlüssel.
Ich bezweifle, dass es funktionieren würde, wenn Sie der Einrichtung Ihres FKs über die fluent-api.
InformationsquelleAutor runxc1 Bret Ferrier
Es ist eine Eigenschaft, die auf jedes EF4 Entität namens
EntityKey
enthält ein array vonEntityKeyValues
(array ist es im Fall von zusammengesetzten Schlüssel).Könnte man auf diese direkt auf Ihre Person-Instanz oder erstellen Sie eine generische Hilfsmethode, die diese unter der Decke. Wenn ich test-drive-einige Beispiel-code, poste ich es hier.
Bearbeiten: Die EntityKeyValue ist ein
KeyValuePair<TKey, TValue>
wo diekey
ist der primary key-Feld der juristischen Person und dievalue
ist der dazugehörige Wert.E. g., Ich habe eine Entität namens
Company
deren Primärschlüssel ist das FeldSymbol
.In mein Sandkasten, bemerkte ich diese Eigenschaft war
null
wenn ich die erstellt habe Entität im code. Aber sobald ich Lesen Sie die Entität aus der Datenbank, es wurde korrekt ausgefüllt. So, es scheint, dass die EF4 primären Schlüssel kommt nur einmal abgespielt werden, trifft es die Datenbank. Obwohl, Sie sind frei, um es explizit vor der Zeit, wenn Sie es wünschen.wie kommt es, dass ich nicht über diese Eigenschaft?
Für den Fall, jemand kommt zu dieser späten... EntityKey existiert nur auf Objekte, die Erben von EntityObject; die einzigen, die das tun, sind Modell-erste Sachen.
InformationsquelleAutor SethO
Ich nehme an, viele Menschen zu stoppen, indem Sie diesen Beitrag einfach durch einen Blick "Entity framework wie finden Sie die primär-Schlüssel?" unabhängig EF version (wie mich). Also wollte ich mal erwähnt, dass mit EF 6.1 Sie können auch eine Verlängerung Methoden, um den Primärschlüssel.
Folgenden ist das Beispiel und funktioniert einwandfrei.
PS: ich bin mir nicht 100% sicher, ob das funktionieren würde mit composite-und compound-keys tho.
Original Source
InformationsquelleAutor curiousBoy
scheint dies unnötig lange?
Ich hatte das gleiche Bedürfnis, und mit der obigen Vorschläge (von SethO und denis_n), die ich benutze:
Hoffe, dies hilft jemand, der interessiert ist,
Sie sind vorausgesetzt, nur eine Spalte ein Primärschlüssel
InformationsquelleAutor Rana