Entity Framework 4: comment trouver la clé primaire?
Je suis en train de créer une méthode générique à l'aide de EF4 pour trouver la clé primaire d'un objet.
exemple
public string GetPrimaryKey<T>()
{
...
}
À donner plus d'info je suis en train de travailler hors de la Tekpub StarterKit et ci-dessous est la classe je suis en train d'essayer de se lever et courir
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
}
}
}
source d'informationauteur runxc1 Bret Ferrier
Vous devez vous connecter pour publier un commentaire.
Donc j'ai enfin réussi à trouver comment obtenir que cela fonctionne. Je souhaite que je n'avais pas perdu le lien vers le blog que j'ai lu, hier soir, je n'ai pas écrit le code.
J'espère que cela aide quelqu'un d'autre. Tout ce que je peux dire, c'est qu'il devrait être un peu plus clair sur la façon de le faire.
Il y a une propriété sur chaque EF4 entité appelée
EntityKey
qui contient un tableau deEntityKeyValues
(tableau est-il dans le cas du composé de la clé).Vous pouvez référencer directement sur votre instance d'entité ou de créer un générique de la méthode d'assistance que ce n'sous les couvertures. Si je peux tester un exemple de code, je vais le poster ici.
Modifier: Le EntityKeyValue est un
KeyValuePair<TKey, TValue>
où lakey
est le champ de clé primaire de l'entité et de lavalue
est la valeur associée.E. g., J'ai une entité appelée
Company
dont la clé primaire est le domaineSymbol
.Dans mon bac à sable, j'ai remarqué cette propriété a été
null
quand j'ai créé l'entité dans le code. Mais une fois que j'ai lu l'entité de la base de données, il a été rempli correctement. Ainsi, il apparaît que la EF4 notion de clé primaire ne vient que pour jouer une fois la base de données. Bien, vous êtes libre de définir explicitement à l'avance, si vous le souhaitez.Je suppose que beaucoup de gens arrêter par ce post juste en regardant "Entity framework, comment trouver la clé primaire?" quel que soit EF version (comme moi). Je voulais donc mentionné que EF 6.1, vous pouvez également créer une extension des méthodes pour obtenir la clé primaire.
Voici l'exemple et fonctionne parfaitement bien.
PS: je ne suis pas sûr à 100%, si cela fonctionnerait avec des composites et des clés composées tho.
Original Source
cela semble inutilement long?
J'ai eu le même besoin, et en utilisant les suggestions ci-dessus (par SethO et denis_n), je suis en utilisant:
Espère que cette aide n'importe qui qui est intéressé