Я играю с WCF REST в .NET 4.0, и в итоге мне захотелось выяснить, возможно ли реализовать какую-то следующую идею?
У меня есть очень простой набор POCO противПроект EF 4.1 CF.Все они наследуются от базового Entity
класса (с единственной целью определения PK).
public abstract Entity {
public int Id { get; set; }
}
Теперь, по большей части, я буду иметь отдельные операции для функциональности CRUD для каждогомоих сущностей (или агрегатов, в более крупных системах, я полагаю).
например,
[ServiceContract]
public class UserService {
[OperationContract]
public void Add(User user) {
// commit to EF
fooContext.Users.Add(user);
fooContext.SaveChanges();
}
}
Теперь, это в первую очередь просто для удобства, но я думал, что что-то подобное будет действительноудобно:
[ServiceContract]
public abstract class BaseCrudService<T> where T : Entity {
[OperationContract]
public void Add(T entity) {
// commit to EF via generic methods
fooContext.Set<T>().Add(entity);
fooContext.SaveChanges();
}
}
public class UserService : BaseCrudService<User> {
// blah
}
... что теоретически позволило бы мне получить доступ к этой операции через http://<root>/userservice/add
и работать с ней так, как я ожидал, за исключением того, что я не могу унаследовать ServiceContract
-декорированныйкласс, так что нет никакой надежды на автоматическое каскадное функционирование вплоть до самих конечных точек.
Мне было интересно: есть ли способ как-то это сделать? Я знаю это наследование (таким образом)не будет сокращать, но есть ли другие способы сделать это?Повторение одинаковых фрагментов кода в нескольких сервисных операциях звучит как то, о чем кто-то мог подумать раньше и придумал более чистый способ реализации.