【发布时间】:2010-10-08 15:51:44
【问题描述】:
我的数据库架构中有一系列大约 30 个查找表,它们都具有相同的布局(我更愿意将它们保留为单独的表而不是一个查找表),因此我的 Linq2SQL 上下文有 30 个实体用于这些查找表。
我有一个标准类,可用于对这 30 个实体中的每一个进行 CRUD 操作,例如:
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
}
我可以复制这个类 30 次,对每个查找实体进行非常小的更改,但这似乎有点混乱 - 所以这个类可以被泛化,所以我也可以将它传递给我想要的类型,并让它在内部处理类型差异在 linq 查询中?这样一来,我就有了一门课要添加,一门课要修复错误等 - 似乎应该这样做。
更新:
下面的安德鲁斯回答给了我一个选项,我在考虑这个问题(传递类型)时真正看到了这个选项,但我需要更多关于如何泛化 linq 查询的说明。谁能澄清一下?
干杯
哞
【问题讨论】:
标签: c#