我想詢問您對我處理多租戶的方式的看法。我「米使用MVC3(切換到MVC4)和EF作爲我的後端我使用一個單一的應用程序,共享模式多租戶下面是代碼:。在MVC上處理多租戶
public abstract class Service<T> where T : Entity
{
private Repository<T> _repo;
public Service()
{
_repo = new Repository<T>();
}
public bool Authenticate(int id)
{
//var companyInfo = _authorizationRepository.GetApiKey(apiKey);
int tenantId = 0; // replaced by companyInfo using repository
var entity = _repo.GetQuery(tenantId).Where(e => e.Id == id).First();
if (tenantId != entity.TenantId)
throw new ArgumentException();
return true;
}
}
public class EmployeeService : Service<Employee>
{
private EmployeeRepository employeeRepository;
public EmployeeService()
{
employeeRepository = new EmployeeRepository();
}
public Employee GetEmployeeById(int employeeId)
{
this.Authenticate(employeeId);
return employeeRepository.GetById(employeeId);
}
}
public class Entity
{
public int Id { get; set; }
public int TenantId { get; set; }
}
當然DI會在那裏,以及但是簡單我在這裏(暫時)刪除了它們,我在服務層使用了泛型(對此感覺很髒),因爲我在比較TenantId和將在類上傳遞的正確實體時遇到了困難。這個使用FilterAttributes,但我沒有任何想法如何處理你的multitenancy問題?設計是否存在一些長期可能遇到的重要缺陷?如果你有一些使用FilterAttributes的示例,那將是一個很大的幫助。
Th anks!
爲什麼Multitenancy甚至是Web應用程序中的一個問題? – Tejs 2012-04-17 14:32:40
@Tejs對我來說關心的是我如何處理路由。基本上tenant1.domain.com和domain.com/tenant2都必須是有效的,並指向特定租戶 – MikeSW 2012-04-17 14:47:17
這很酷,但該特定的URL方案與您決定使用的持久層無關。我想我想知道你的問題是什麼。 – Tejs 2012-04-17 14:48:23