이것은 프로그래밍 코드 첫 번째 EF를 기반으로 한 예제입니다.EF 5 코드 첫 번째 엔터티 FirstOrDefault 메서드가 null을 반환합니다.
아래 클래스를 확인하십시오. PersonRepository가 인스턴스화되고 InsertOrUpdate 메소드가 호출 될 때 Null 값이 리턴됩니다. 나는 IQuariable의 FitstOrDefault가 Null을 리턴해서는 안된다는 것을 알고있다.
무엇이 잘못 되었나요? 도움을 주셔서 감사합니다
public class Person
{
public int PersonId { get; set; }
public int SocialSecurityNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
//public int MyProperty { get; set; }
public List<Lodging> PrimaryContactFor { get; set; }
public List<Lodging> SecondaryContactFor { get; set; }
public PersonPhoto Photo { get; set; }
}
사진 클래스
public class PersonPhoto
{
public int PersonID { get; set; }
public byte[] Photo { get; set; }
public string Caption { get; set; }
public Person PhotoOf { get; set; }
}
DBContext 클래스
public class DomainContext:DbContext,IDisposable
{
public DomainContext(string connectionString):base(connectionString)
{
}
public DbSet<Person> People { get; set; }
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<PersonPhoto>()
.HasKey(p => p.PersonID);
modelBuilder.Entity<PersonPhoto>()
.HasRequired(p => p.PhotoOf)
.WithRequiredDependent(p => p.Photo);
}
}
저장소 클래스
public class PersonRepository
{
public PersonRepository()
{
}
public void InsertOrUpdate()
{
using( DomainContext ctx = new DomainContext())
{
var person= ctx.People.Include("Photo").FirstOrDefault();
person.FirstName="Pnikey";
if(person.Photo==null)
{
person.Photo= new PersonPhoto{Photo=new byte[]{0}};
}
ctx.SaveChanges();
}
}
}
나는 정말로 당신의 대답을 받아들입니다. 좋아,하지만 Programming EntityFramework Person.FirstName = "some data"라는 책의 예에 따르면; 실행 가능해야합니다. 그것의 돌려 보내는 Null로 나는 할당 할 수 없을 것이다. 나 맞아. Programming EntityFramework CodeFirst Chapter 4 (일대일 관계로 작업하기) 페이지 87을 참조하십시오. – Desmond
@Desmond - 나는이 책을 소유하지 않으므로 참고할 수 없습니다. 그러나 먼저 null을 확인해야합니다. 존재하지 않는 객체에는 무언가를 할당 할 수 없습니다. 개체가 데이터베이스에 없으면 새 개체를 만들려고합니까? Person 테이블에 레코드가 없으면이 작업은 실패합니다. 새 Person 객체를 만들고 이름을 지정한 다음 Person DbSet 및 SaveChanges에 추가해야합니다. –
나는 요점을 이해하지만 책에 따르면 제대로 작동해야합니다. 내가 책의 저자에게 트위터를 썼기 때문에 그녀가하는 말을 볼 시간을 좀주세요. 일단 내가 답변을 얻을 것이다 이것을 업데이 트됩니다. 도와 주셔서 감사합니다. – Desmond