J'ai une série d'environ 30 tables de recherche dans mon schéma de base de données, toutes avec la même mise en page (et je préférerais les garder en tant que tables séparées plutôt qu'une seule table de recherche), et donc Le contexte Linq2SQL a 30 entités pour ces tables de recherche.Générer une classe pour gérer plusieurs types
J'ai une classe standard que j'utiliser pour les opérations CRUD sur chacun de ces 30 ENTITES, par exemple:
public class ExampleAttributes : IAttributeList
{
#region IAttributeList Members
public bool AddItem(string Item, int SortOrder)
{
MyDataContext context = ContextHelper.GetContext();
ExampleAttribute a = new ExampleAttribute();
a.Name = Item;
a.SortOrder = SortOrder;
context.ExampleAttributes.InsertOnSubmit(a);
try
{
context.SubmitChanges();
return true;
}
catch
{
return false;
}
}
public bool DeleteItem(int Id)
{
MyDataContext context = ContextHelper.GetContext();
ExampleAttribute a = (from m in context.ExampleAttributes
where m.Id == Id
select m).FirstOrDefault();
if (a == null)
return true;
// Make sure nothing is using it
int Count = (from m in context.Businesses
where m.ExampleAttributeId == a.Id
select m).Count();
if (Count > 0)
return false;
// Delete the item
context.ExampleAttributes.DeleteOnSubmit(a);
try
{
context.SubmitChanges();
return true;
}
catch
{
return false;
}
}
public bool UpdateItem(int Id, string Item, int SortOrder)
{
MyDataContext context = ContextHelper.GetContext();
ExampleAttribute a = (from m in context.ExampleAttributes
where m.Id == Id
select m).FirstOrDefault();
a.Name = Item;
a.SortOrder = SortOrder;
try
{
context.SubmitChanges();
return true;
}
catch
{
return false;
}
}
public String GetItem(int Id)
{
MyDataContext context = ContextHelper.GetContext();
var Attribute = (from a in context.ExampleAttributes
where a.Id == Id
select a).FirstOrDefault();
return Attribute.Name;
}
public Dictionary<int, string> GetItems()
{
Dictionary<int, string> Attributes = new Dictionary<int, string>();
MyDataContext context = ContextHelper.GetContext();
context.ObjectTrackingEnabled = false;
Attributes = (from o in context.ExampleAttributes orderby o.Name select new { o.Id, o.Name }).AsEnumerable().ToDictionary(k => k.Id, v => v.Name);
return Attributes;
}
#endregion
}
je pourrais reproduire cette classe 30 fois avec des changements mineurs pour chaque entité de recherche, mais cela semble en quelque sorte désordonné - donc cette classe peut-elle être générialisée pour que je puisse aussi passer le type que je veux, et le faire gérer en interne les différences de type dans les requêtes linq? De cette façon, j'ai une classe à faire des ajouts, une classe à corriger les bugs et al - semble la façon dont il devrait être fait.
MISE À JOUR:
Andrews réponse ci-dessous m'a donné l'option que je cherchais vraiment à en pensant à la question (en passant du type dans) mais j'ai besoin plus de précisions sur la façon de genericise les requêtes LINQ. Quelqu'un peut-il clarifier cela?
Vive
Moo
Merci pour la réponse, pouvez-vous approfondir la deuxième option? – Moo
@Moo Voir la modification ci-dessus. – Andrew
Salut Andrew, merci pour le détail supplémentaire, malheureusement, c'est la générique du linq basé sur le type donné que j'ai vraiment besoin de clarification - je mettrai à jour la question à cet effet mais merci pour vos efforts. – Moo