EF 코드 우선으로 개체를 데이터베이스에서 가져 오려고 할 때 몇 가지 문제가 있습니다. 내가 사용하고있는 프로그램은 Visual Studio 2010이고 프로젝트 유형은 ASP.NET MVC3 프로젝트입니다.EF 코드 첫 번째 - 데이터베이스에서 오는 개체가 null입니다.
이제 데이터베이스에서 FK가 제대로 구성되었지만 연결된 개체가 항상 null이라는 문제가 있습니다.
구체적인 시나리오 : 사용자에게는 팀 (선택 사항)이 있고 팀에는 사용자 (사용자 수는 0 일 수 있음)가 있습니다. 이제 특정 사용자와 함께 webapp에 로그온 할 때 해당 팀의 다른 사용자를 표시 할 수 있어야합니다. 문제는 로그온 한 사용자의 Team 개체가 null이라는 것입니다. User (int? teamId)의 외래 키를 사용하고이 외래 키를 사용하여 적절한 팀을 할당하는 해결 방법을 찾았습니다. 그러나 내 문제는이 방법을 사용하지 않고 해결해야합니다. 내 코드 : 매핑에 대한 지금
public class Team
{
[Key]
public int Id { get; set; }
[MaxLength(100)]
public string Name { get; set; }
public virtual ICollection<User> UsersInTeam { get; set; }
public Team()
{
UsersInTeam = new List<User>();
}
public void AddUser(User user)
{
if(UsersInTeam.Contains(user))
throw new ArgumentException(String.Format("Cannot add {0} to {1} because the user is already assigned to that team", user.Name, Name));
user.Team = this;
UsersInTeam.Add(user);
}
public class User
{
public int Id { get; set; }
[Required, MaxLength(100)]
public string Email { get; set; }
[Required, MaxLength(100)]
public string Password { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
[Required, MaxLength(100)]
public string FirstName { get; set; }
public string Mobile { get; set; }
public bool IsAdminstrator { get; set; }
public virtual Team Team { get; set; }
public User()
{
Team = new Team();
}
}
: 나는 모든 적절한 속성이 DB에서 오는 사용자 개체가에 user.Team가 null을 제외하고
modelBuilder.Entity<Team>().HasMany(t => t.UsersInTeam).WithOptional(u => u.Team).Map(m => m.MapKey("TeamId")).WillCascadeOnDelete(false);
modelBuilder.Entity<User>().HasOptional(u => u.Team).WithMany(u => u.UsersInTeam).Map(m => m.MapKey("TeamId")).WillCascadeOnDelete(false);
그래서 후, 로그인. 데이터베이스에서 User 테이블에는 외래 키 열 TeamId가 있어야하며 사용자에게는 해당 팀 ID가 있지만 팀은 항상 null입니다.
나는이 문제로 인해 상당히 좌절하고 있기 때문에 누군가가 살펴볼 수 있다면 정말 고맙겠습니다.
인사말 쿼리에서
로그인 한 사용자 – keshav
예와 동일한 teanId를 가진 모든 항목에 대해 사용자 테이블을 쿼리하여 언제든지 검색 할 수 있습니다. 그 팀의 사용자 만 필요하면 그럴 것입니다. 제 경우에는 Team 객체가 필요합니다.이 객체는 응용 프로그램에서 계속 사용될 다른 객체와도 연관되어 있기 때문입니다. – SimranS
User 클래스에 TeamId 속성을 추가 해보십시오. 나는 항상 그렇게하며, 그런 일이 일어나는 것을 보지 못했다. – deerchao