我正在使用 MVC、实体框架、Durandal 和 Breeze JS。我有一个看起来像这样的用户(简化):
public class User : EntityBase<Guid>, IAggregateRoot
{
public Guid Id { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[ForeignKey("UserImage")]
public virtual Guid? ImageId { get; set; }
public virtual UserImage UserImage { get; set; }
}
UserImage 类看起来像这样。我知道我应该限制图像的大小。(也许这是问题所在?):
public class UserImage
{
public Guid Id { get; set; }
[MaxLength]
public byte[] Image { get; set; }
}
我在服务器上有一个 api 函数来获取当前用户:
public IQueryable<User> GetCurrentUser()
{
IPrincipal principal = HttpContext.Current.User;
var users = _uow.Users.FindBy(u => u.UserName.Equals(principal.Identity.Name));
if (!users.Any())
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Unauthorized));
}
return users;
}
客户端上的两个调用获取当前用户。第一个是在外壳中:
function loadCurrentUser() {
return uow.CurrentUser.all().then(function (newUser) {
log('Welcome to the Site ' + newUser[0].FullName() + '!', newUser[0], true);
config.CurrentUser(newUser[0]);
return true;
});
}
第二个是在 ManageUser 视图模型中:
function activate() {
return uow.CurrentUser.all(['UserImage']).then(function (user) {
self.CurrentUser(user[0]);
return $.when(init()).then(boot());
}).fail(function() {
return router.activate('accounts/login');
});
}
现在我可以将图像加载到 ManageUser 页面并保存并在提琴手中显示 ImageId 和 Image 正在发送到服务器。然后我检查了 BeforeSaveEntity 拦截并显示两个实体正在保存。
- 设置了 ImageId 的更新用户
- 新用户图片
数据在数据库中也是可见的。现在,当我刷新管理用户页面时,我可以在提琴手中看到两个 GetCurrentUser 调用。
- 从 shell 调用中,我可以看到正在返回用户并设置了 ImageId,但没有发送 UserImage,因为没有展开查询。
- 从管理用户调用中,我看到返回了用户,但只发送了 ImageId,并且从 JSON 中省略了 Image 对象。
有没有人遇到过这个图片问题?我所有的其他扩展似乎都正常工作。有没有人有任何关于使用微风仅保存图像的文件路径并可能使用 Windows azure 进行媒体存储的示例?