我有以下DBML修改(我使用Linq to SQL作爲DAL)。具有通用工廠模式的IRepository模式
public interface ILinqSQLObject { }
// these are objects from SQL Server mapped into Linq to SQL
public partial class NEWDEBT : ILinqSQLObject { }
public partial class OLDDEBT : ILinqSQLObject { }
public partial class VIPDEBT : ILinqSQLObject { }
由於我可以更好地在其他區域操縱我的Linq對象。
我剛剛完成了一個IRepository模式實現。
public interface IDebtManager<T>
{
IQueryable<T> GetAllDebts();
IQueryable T GetSpecificDebt(System.Linq.Expressions.Expression<Func<T, bool>> predicate);
void Insert(T debt);
// other methods
}
public class DebtManager<T> : IDebtManager<T> where T : class, ILinqSQLObject
{
DebtContext conn = new DebtContext();
protected System.Data.Linq.Table<T> table;
public DebtManager()
{
table = conn.GetTable<T>();
}
public void Insert(T debt)
{
throw new NotImplementedException();
}
public IQueryable<T> GetSpecificDebt(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
return table.Where(predicate);
}
public IQueryable<T> GetAllDebts()
{
return table;
}
}
而且工作完美無瑕。但是,有時我不知道,在編譯時,我將使用哪個特定的表。爲此,我嘗試爲我的DebtManager創建一個簡單的通用工廠。
public static class DebtFactoryManager
{
public static DebtManager<ILinqSQLObject> GetDebtManager(string debtType)
{
switch (debtType)
{
case "New Client":
return new DebtManager<NEWDEBT>();
case "Old Client":
return new DebtManager<OLDDEBT>();
case "VIP Client":
return new DebtManager<VIPDEBT>();
default:
return new DebtManager<NEWDEBT>();
}
return null;
}
}
但它不起作用。它說我不能'暗示將DebtManager<NEWDEBT>
轉換爲DebtManager<ILinqSQLObject>
',但是如果NEWDEBT實現ILinqSQLObject,爲什麼編譯器不能識別它?很明顯,我犯了一些錯誤,但我看不到它。
這是實效代碼嗎?我認爲靜態工廠方法缺少名稱。 –
我不小心刪除了它的名字。我只是編輯它。謝謝 – AdrianoRR