【发布时间】:2012-05-21 10:27:44
【问题描述】:
我如何使用 WCF 服务中的自我跟踪实体来实现 ServiceContract
这是我在 IPbService.cs
中的 ServiceContractnamespace PhoneBookService
{
[ServiceContract]
public interface IPbService
{
[OperationContract]
List<User> GetAllUser();
[OperationContract]
string AddUser(User user);
[OperationContract]
string DeleteUser(int id);
[OperationContract]
string UpdateUser(User user);
[OperationContract]
List<Contact> GetContactsByUser(int id);
[OperationContract]
string AddContact(Contact contact, string userName);
[OperationContract]
string DeleteContact(int id);
[OperationContract]
string UpdateContact(Contact contact);
}
}
这是我在 PbService.svc.cs
中的实现类namespace PhoneBookService
{
public class PbService : IPbService
{
readonly PhoneBookDBEntities _context = new PhoneBookDBEntities();
public List<User> GetAllUser()
{
return _context.Users.OrderBy(u => u.Name).ToList();
}
public string AddUser(User user)
{
try
{
_context.Users.AddObject(user);
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
public string DeleteUser(int id)
{
try
{
User user = _context.Users.FirstOrDefault(u => u.UserID == id);
_context.Users.DeleteObject(user);
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
public string UpdateUser(User user)
{
try
{
if (user == null) throw new ArgumentNullException("user");
User oldUser = _context.Users.FirstOrDefault(u => u.UserID == user.UserID);
if (oldUser != null)
{
oldUser.Name = user.Name;
oldUser.Password = user.Password;
oldUser.UserName = user.UserName;
oldUser.Email = user.Email;
oldUser.CreationDate = DateTime.Now;
}
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
public List<Contact> GetContactsByUser(int id)
{
User user = _context.Users.FirstOrDefault(u => u.UserID == id);
if (user == null) throw new ArgumentNullException("id");
return user.Contacts.OrderBy(c=>c.Name).ToList();
}
public string AddContact(Contact contact, string userName)
{
try
{
User user = _context.Users.FirstOrDefault(u => u.UserName == userName);
if (user != null) user.Contacts.Add(contact);
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
public string DeleteContact(int id)
{
try
{
Contact contact = _context.Contacts.FirstOrDefault(c => c.ContactID == id);
_context.Contacts.DeleteObject(contact);
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
public string UpdateContact(Contact contact)
{
try
{
Contact oldContact = _context.Contacts.FirstOrDefault(c => c.ContactID == contact.ContactID);
if (oldContact != null)
{
oldContact.Name = contact.Name;
oldContact.PhoneNumber = contact.PhoneNumber;
oldContact.Email = contact.Email;
oldContact.Mobil = contact.Mobil;
oldContact.Address = contact.Address;
}
_context.SaveChanges();
return "";
}
catch (Exception e)
{
return e.Message;
}
}
}
}
【问题讨论】:
-
PbModel.Context.tt 表明您已经应用了 ADO.net 自跟踪实体生成器,那么我们可以假设您的问题是关于如何正确使用这些实体吗?
-
@GertArnold 是的,我询问了如何在 PbService.svc.cs 文件中使用自我跟踪来重新实现这些方法
标签: wcf entity-framework self-tracking-entities