我正在探索 private readonly DataContext _context = new DataContext();
public int Count() { return _context.Isletme_Rehberi.Count(); }
public void Delete(int id) { var Isletme_Rehberi = GetById(id); if (Isletme_Rehberi != null) _context.Isletme_Rehberi.Remove(Isletme_Rehberi); }
ERROR OCCURS IN THIS LINE : public Isletme_Rehberi Get(Expression<Func<Isletme_Rehberi, bool>> expression) { return _context.Isletme_Rehberi.FirstOrDefault(expression); }
public IEnumerable<Isletme_Rehberi> GetAll() { return _context.Isletme_Rehberi.Select(x => x); }
public Isletme_Rehberi GetById(int id) { return _context.Isletme_Rehberi.FirstOrDefault(x => x.id == id); }
public IQueryable<Isletme_Rehberi> GetMany(Expression<Func<Isletme_Rehberi, bool>> expression) { return _context.Isletme_Rehberi.Where(expression); }
public void Insert(Isletme_Rehberi obj) { _context.Isletme_Rehberi.Add(obj); }
public void Save() { _context.SaveChanges(); }
public void Update(Isletme_Rehberi obj) { _context.Isletme_Rehberi.AddOrUpdate(obj); }
,并且除了和
ActiveSupport::Notifications
[1]之外,我还想了解有关'instantiation.active_record'
的更多信息。例如,
:record_count
可以这样做吗?如果可以,怎么办?
更新: 感谢下面的汤姆和帕维尔。挑战的一部分是,我正在构建一个第三方的gem,它将分析主机应用程序的所有SQL返回,而无需修改其代码。基本上,将其插入Gemfile并捆绑,然后离开。
我正在考虑使用extending ActiveRecord::Base和using the method append_info_to_payload,但到目前为止,它们都无法正常工作。
作为一个例子,我想覆盖ActiveRecord :: Query.find_by_sql()方法的有效负载,看起来像这样:
:class_name
在测试中,并手动编辑本地ActiveRecord gem,这将通过ActiveSupport :: Notifications发布/订阅提供完整的result_set。
回答:因此,答案是使用ActiveSupport::Notifications.subscribe /instantiation.active_record/ do |*args|
args.status #Database or ActiveRecord return status
args.result #The actual result set returned
args.etc .. #Any other info I can collect on the event
# Additional code ...
end
方法,并覆盖ActiveRecord :: Querying:
payload = {
record_count: result_set.length,
class_name: name,
result_set: result_set
}
我将此添加到了我的宝石的class_eval
文件中。
最终:我在ActiveRecord上创建了两个拉取请求,以使result_set传递到有效负载中,以用于ActiveSupport :: Notifications:querying.rb和join_dependency.rb。
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用::instrument
创建一个custom hook。然后,您可以定义具有status
,result_set
等的有效负载,并在块中定义其行为。
您可以在::instrument
和::subscribe
here上找到更强大的文档。
编辑:我正在进一步研究,发现this stack overflow question。您似乎正在寻找方法append_info_to_payload
。它已移至{5}的private method上。