在我的控制器操作中,我试图将新图像添加到数据库中。图像需要与设备相关联,设备与用户相关联。
所以我有我的实体类:
public class Image
{
public int Id { get; set; }
public string Url { get; set; }
[Required]
public virtual Device { get; set; }
}
public class Device
{
public int Id { get; set; }
public string Name { get; set; }
[Required]
public virtual User { get; set; }
}
public class User
{
public int Id { get; set; }
public string Login{ get; set; }
public virtual ICollection<Device> Devices { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
public virtual string Email{ get; set; }
}
现在,当我尝试像这样添加新图像时:
var image = new Image();
image.Device = Db.DbSet<Device>().Find(1);
Db.DbSet<Image>().Add(image);
Db.DbSet<Image>().SaveChanges();
问题是,当我使用它Find
来加载现有设备(用户和所有属性设置正确)时,我没有在设备中获得正确填充的用户属性。就像延迟加载不起作用。有一个User
对象的实例,但它的 id 设置为 0,并且它的所有其他字段都设置为其默认值。
我将所有导航属性设置为虚拟,延迟加载在我的其他实体上也可以正常工作,所以它绝对没有关闭或其他什么。
有趣的是,当我在添加图像之前更改代码并进行如下比较时,它会加载用户并正常工作:
if (AuthenticationHelper.CurrentUser != image.Device.User)
return null;
就像它在这一刻设法加载用户一样。如果我们改变这个比较顺序,那么跟随image.Device.User != AuthenticationHelper.CurrentUser
它就不再起作用了。
有什么想法吗?