@ Ладислав - я согласен; на самом деле нет никакой причины делать полную реализацию IDbSet. Я обнаружил, что переопределение свойства Expression исключительно сложно.

ел бы передать значение в ctor DbContext, а затем заставить это значение принудительно «фильтровать» в связанных DbSets. Это возможно ... или есть лучший подход?

Код может выглядеть так:

class Contact {
  int ContactId { get; set; }
  int CompanyId { get; set; }
  string Name { get; set; }
}

class ContactContext : DbContext {
  public ContactContext(int companyId) {...}
  public DbSet<Contact> Contacts { get; set; }
}

using (var cc = new ContactContext(123)) {
  // Would only return contacts where CompanyId = 123
  var all = (from i in cc.Contacts select i);

  // Would automatically set the CompanyId to 123
  var contact = new Contact { Name = "Doug" };
  cc.Contacts.Add(contact);
  cc.SaveChanges();

  // Would throw custom exception
  contact.CompanyId = 456;
  cc.SaveChanges;
}