我正在尝试创建一个 wcf 数据服务,我不想访问数据库模型,而是想使用数据传输对象。我在互联网上阅读了很多关于如何实现这一点的信息,但我无法为我的问题找到一个好的答案。这是我第一次使用 wcf 数据服务做一些事情,所以我有点缺乏经验。
好的,这是我使用实体框架链接到我的数据库的模型
public class User
{
[Key]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string CountryCode { get; set; }
public string PhoneNumber { get; set; }
public ICollection<User> Contacts { get; set; }
public virtual Language Language { get; set; }
public User()
{
Contacts = new List<User>();
}
}
public class Message
{
[Key]
public int MessageId { get; set; }
public DateTime SentDate { get; set; }
public virtual User Sender { get; set; }
public virtual User Receiver { get; set; }
public string Content { get; set; }
public string OriginalCultureInfoEnglishName { get; set; }
public string ForeignCultureInfoEnglishName { get; set; }
}
public class Language
{
[Key]
public int LanguageId { get; set; }
public string CultureInfoEnglishName { get; set; }
}
现在我制作了一个包含我的 DatabaseContext 的 Service.svc,因此它可以直接访问我的数据库模型。我想要实现的是,当我查询我的服务时,我想获取 DTO 模型,而不是直接获取数据库模型。
我的 dto 的外观示例
public class UserDTO
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Country { get; set; }
public string PhoneNumber { get; set; }
public ICollection<ContactDTO> Contacts { get; set; }
public virtual LanguageDTO Language { get; set; }
public UserModel()
{
Contacts = new List<ContactDTO>();
}
}
public class ContactDTO
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Country { get; set; }
public string PhoneNumber { get; set; }
public virtual LanguageDTO Language { get; set; }
}
public class LanguageDTO
{
public int LanguageId { get; set; }
public string CultureInfoEnglishName { get; set; }
}
public class MessageDTO
{
public int MessageId { get; set; }
public DateTime SentDate { get; set; }
public virtual ContactDTO Sender { get; set; }
public virtual ContactDTO Receiver { get; set; }
public string Content { get; set; }
public string OriginalCultureInfoEnglishName { get; set; }
public string ForeignCultureInfoEnglishName { get; set; }
}
现在是否可以通过创建一个我可以在我的 service.svc 中使用的不同上下文来做到这一点,或者有没有其他方法可以实现这一点?
例如,我想通过 userid 获取 ContactDto,它是一个用户,但属性较少,因为它们在客户端应用程序中不相关。我看到这发生在一个 urihttp://localhost:54895/Service.svc/ContactDto(1)
希望任何人都可以为我解决这个问题,因为这真的很令人沮丧:)