我想找一個解決方法來完成一個簡單的解決方案,以通過EF自動化某些操作。 我需要它在保存和檢索過程中接管修改查詢結果,但這個類將能夠使任何類型實體的工作。Entity Wrapper - 自定義
例如:我有一個MyTestDb。所以在我的C#項目中,我創建了一個新的實體模型(MyTEstDbModel.edmx),並生成了相關的POCO類。 好,興趣點可能是實現一個新的定製類像以下:
class Example
{
private ObjectContext _context;
private Example(ObjectContext obj) { _context = obj; }
public void Store(ObjectSet<???generic???> os)
{
// problem here: I dont't know the type contained in ObjectSet
// but if I Knew its type, I could make a work like this:
// -> foreach every instance in objectSet to check if exist some property
// via reflection, if i found them, then I set always the same values.
// Why this? Because all my db contains some common filed
// like (createdByUser, TimeToUpdate, and so on..), so it wold be boring
// setting all those fileds from any point of program.
}
public void Retrive(ObjectSet<???generic???> os)
{
// here problem too: all my queries will be filtered by one or more value
// fileds, but I cannot use lambaExpression cos I don't Know the type
// contained in objectSet<..>
}
//....
最後,通過程序的任何點,代碼應該出現類似以下內容:
Example obj = new Example(myEntityContext); //-> global
var result = myEntityContext.ObjectSetTyped.Where(..lambaExpression..condition)
result.someProperty = "...";
obj.Store(result); // store method will fill all other boring filed automatically.
誰能給我一些提示,幫助,關於我的問題的建議?
在此先感謝...
更新
現在,僅僅只有一個問題。我倒是過濾我的對象集通過檢索方法類似以下內容:
public void Retrieve<TEntity>(IQueryable<TEntity> ooo) where TEntity : IC
{
ooo = ooo.Where(p => p.Filed == "MyDefaultValue");
}
但是,從外部方法,而不是對象集的結果是我的過濾器的影響。 怎麼這麼..?
MyEntities ent = new...
MyWrapper wrap = new MyWrapper();
wrap.Retrieve(ent.Users);
//這裏的問題 - >用戶對象集始終是相同的..
Thnaks你很支持,但真正的問題恰恰是這樣的:我不」 t想要(由於任何原因)既不會修改T4模板也不會自動生成通過我的接口繼承的實體容器。所有我想要的是創建我的新類允許上述操作生成任何類型的實體.. – Bit 2011-03-31 12:12:52
MOREOVER,請注意,並非我所有的數據庫的表都包含相同的屬性,有人擁有「property1 - property2」,其他只能擁有「property1」接口實現將失敗。 – Bit 2011-03-31 12:24:13
在這種情況下,祝你好運。如果你想通用的方法,你需要一些基礎接口或類來開始。您使用反射提出的解決方案可能是性能殺手,並且是在代碼審查之後得到一些非常糟糕的反饋的最佳方式。不要懶惰,如果你有多個不同的屬性集,你應該有多個方法。 – 2011-03-31 19:28:42