我在嘗試使用EF Code First從數據庫中獲取對象時遇到了一些問題。我使用的程序是Visual Studio 2010,項目類型是ASP.NET MVC3項目。EF代碼優先 - 來自數據庫的對象爲空
現在,問題是關聯的對象始終爲空,儘管在數據庫中正確配置了FK。
具體場景:用戶有團隊(可選),團隊有其用戶(Users.Count可以爲零)。 現在,當某個用戶登錄到webapp時,應該可以顯示該團隊中的其他用戶。問題是登錄用戶的Team對象爲空。我找到了一個在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();
}
}
現在的映射:
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);
所以後登錄我與所有適當的屬性從DB未來用戶對象,除了user.Team爲空。在數據庫中,用戶表具有外鍵列表TeamId,因爲它應該和用戶具有相應的teamId,仍然Team總是空。
我真的很感激,如果有人可以看看它,因爲我因爲這個問題而感到非常沮喪。
問候
您可以隨時通過查詢用戶表來檢索與登錄用戶具有相同teanId的所有條目。 – keshav
是的,那是真的。如果我只需要該團隊的用戶,情況就會如此。在我的情況下,我需要Team對象,因爲它還與將在應用中進一步使用的其他對象有關聯。 – SimranS
嘗試在類User上添加一個TeamId屬性。我總是那樣做,而我卻沒有看到這樣的事情發生。 – deerchao