Я разрабатываю службу WCF RESTful с библиотекой Entity Framework Code First 4.4.0.0, C# и .NET Framework 4.0.Прокси-объекты WCF и Entity Framework
Я пытаюсь получить группы, где user_id
является членом этого метода:
public List<Group> GetUserGroups(string user_id)
{
List<Group> groups = null;
int userId;
OutgoingWebResponseContext ctx =
WebOperationContext.Current.OutgoingResponse;
// Check parameters. It will throw an exception.
ParameterCheck.CheckObjectId(user_id);
// Parase parameter to int.
userId = Int32.Parse(user_id);
try
{
using (var context = new MyContext())
{
//context.Configuration.ProxyCreationEnabled = false;
//context.Configuration.LazyLoadingEnabled = false;
User user = context.Users.Find(userId);
if (user == null)
{
ThrowCustomWebException(
(int)ExceptionReasons.InvalidUser,
(int)ExceptionDetailedInformation.UserNotFound);
}
else
{
var grps = from g in context.Groups.Include("Users").Include("WantsToDo")
from u in g.Users
where u.UserId == userId
select g;
if ((grps == null) ||
(grps.Count() == 0))
{
ctx.StatusCode = System.Net.HttpStatusCode.NotFound;
ctx.SuppressEntityBody = true;
}
else
{
foreach (Group group in grps)
{
group.UsersIds = group.Users.Select(u => u.UserId).ToList();
group.ActivityIds = group.WantsToDo.Select(a => a.ActivityId).ToList();
}
groups = grps.ToList();
ctx.StatusCode = System.Net.HttpStatusCode.OK;
}
}
}
}
catch (Exception ex)
{
// ReThrow this exception because we need to indicate that the user is
// invalid because there isn't that user on database.
if ((ex is WebFaultException<ErrorData>))
throw;
else
{
TraceTool.WriteTraceLog(ex, "GetUserGroups");
ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
ctx.SuppressEntityBody = true;
}
}
return groups;
}
Но, у меня есть проблемы с WCF, потому что, здесь:
group.UsersIds = group.Users.Select(u => u.UserId).ToList();
group
является Proxy
объект.
Но если я context.Configuration.ProxyCreationEnabled = false;
или context.Configuration.LazyLoadingEnabled = false;
, то group
не прокси, но group.Users
равно нулю.
Как исправить эту проблему?
Отлично !!! Это работает!!! Можете ли вы объяснить мне, почему? Благодарю. – VansFannel
Я добавил несколько комментариев, которые помогают? http://msdn.microsoft.com/en-us/library/vstudio/bb397933.aspx – Colin