嗨,我刚刚学习 WCF,我正在尝试在我正在从事的虚拟项目上实现 WCF 服务,我希望这样做是正确的。
我的项目包含一个 DataAccess 项目,该项目具有一个实体框架存储库,可用于访问数据库中的数据。模型和接口如下所示:
public partial class BookModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public string Description { get; set; }
public DateTime PublicationDate { get; set; }
public int CategoryId { get; set; }
public decimal Price { get; set; }
public string BookUrl { get; set; }
}
public interface IBookRepository
{
IEnumerable<BookModel> GetBooks(int pageNumber, int numberOfBooksOnPage);
IEnumerable<BookModel> GetBookByCategory(int categoryId, int pageNumber, int numberOfBooksOnPage);
BookModel GetBookById(int bookId);
int CountBooks();
int CountBooksByCategory(int categoryId);
void AddBook(BookModel book);
void UpdateBook(BookModel book);
void DeleteBook(int bookId);
}
现在,当我实现 wcf 服务时,我必须定义服务合同和数据合同。问题是这两个是我当前模型和存储库的完全相同的副本,所以我不确定该怎么做。
这是我到目前为止所拥有的,但我不确定这是正确的方法:
[DataContract]
public class Book
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Author { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public DateTime PublicationDate { get; set; }
[DataMember]
public int CategoryId { get; set; }
[DataMember]
public decimal Price { get; set; }
[DataMember]
public string BookUrl { get; set; }
}
[ServiceContract]
interface IBookService
{
[OperationContract]
IEnumerable<Book> GetBooks(int pageNumber, int numberOfBooksOnPage);
[OperationContract]
IEnumerable<Book> GetBookByCategory(int categoryId, int pageNumber, int numberOfBooksOnPage);
[OperationContract]
Book GetBookById(int bookId);
[OperationContract]
int CountBooks();
[OperationContract]
int CountBooksByCategory(int categoryId);
[OperationContract]
void AddBook(Book book);
[OperationContract]
void UpdateBook(Book book);
[OperationContract]
void DeleteBook(int bookId);
}
将模型和存储库移动到 wcf 服务中是一个好主意吗?
或者我应该在我的 wcf 项目中为这两个类创建重复项,只从存储库中调用方法?