내 컨트롤러 작업 데이터베이스에 새 이미지를 추가하려고합니다. 이미지는 사용자와 연결된 기기와 연결되어야합니다. 나는이 같은 새로운 이미지를 추가하려고 해요 때 이제엔티티 프레임 워크 지연 지연 잘못된 동작
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
를 사용할 때 기존 LAD하는 것입니다 장치 (사용자 및 모든 속성이 올바르게 설정되어 있음) 장치에 올바르게 채워진 사용자 속성을 얻지 못했습니다. 게으른 로딩이 작동하지 않는 것과 같습니다. User
개체의 인스턴스가 있지만 ID는 0으로 설정되고 다른 모든 필드는 기본값으로 설정됩니다.
나는 모든 탐색 속성을 가상으로 설정했습니다. 또한 느린 로딩은 다른 엔티티에서 잘 작동하므로 확실히 꺼지지 않습니다.
if (AuthenticationHelper.CurrentUser != image.Device.User)
return null;
을이이 순간에 사용자로드 관리 정확히 같은 :
재미있는 것은 내가 내 이미지를 추가하기 전에처럼 내 코드와 비교를 변경할 때 다음 사용자를로드하고 잘 작동한다는 것입니다. 이 비교 순서를 변경하면 image.Device.User != AuthenticationHelper.CurrentUser
에 따라 더 이상 작동하지 않습니다.
어떤 아이디어가 있습니까?
'Device' 클래스는'User' 속성을 인스턴스화하는 기본 생성자를 가지고 있습니까? 그렇다면 인스턴스화없이 제대로 작동하는지 확인하십시오. – Slauma
@Slauma - 당신이 옳았다는 것이 밝혀졌습니다! 동의 할 수 있도록 답변을 추가하십시오. –