Entity Framework 有一个奇怪的问题,如果我尝试访问不是当前用户的用户变量,则会引发错误。我将 ASP.NET MVC 4 与 SignalR(这是在 SignalR 集线器中)和 SimpleMembership 一起使用来提供身份验证。
这是我的代码:
using (CfDb db = new CfDb())
{
var currUser = db.Users.FirstOrDefault(a => a.ID == UserID);
if (currUser != null && currUser.Challenge == Challenge)
{
var posts = db.Posts.Where(a => a.Privacy == "public").OrderByDescending(a => a.PostedTime);
List<int> People = new List<int>();
foreach (Post post in posts)
{
People.Add(post.Poster.ID);
}
}
}
如果post.Poster
与当前登录用户相同,它将返回发布帖子的正确用户,但如果不是,则为post.Poster
null 并post.Poster.ID
引发异常。如果我取出所有 currUser 代码(并且只执行 if(true)),错误仍然会发生,因此它似乎与 currUser 变量无关。我什至没有对 WebSecurity 做任何事情——using System.Web.Security;
从页面顶部删除并不能解决它。我不知道它似乎如何知道当前用户是谁,而且如果它是当前用户,它只会返回海报似乎很奇怪。
这是我的代码优先模型的重要部分:
public class User
{
[Key]
public int ID { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Realname { get; set; }
[Required]
public DateTime JoinDate { get; set; }
public virtual ICollection<User> Friends { get; set; }
[Required]
public string Challenge { get; set; }
public School School { get; set; }
public int Grade { get; set; }
[Required]
public double Vici { get; set; }
public virtual ICollection<Classroom> Classes { get; set; }
}
public class Post
{
public int ID { get; set; }
[Required]
public double Vici { get; set; }
public User Poster { get; set; }
public Classroom Class { get; set; }
[Required]
public string Content { get; set; }
public virtual ICollection<User> Likes { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public string Type { get; set; }
public string Privacy { get; set; }
[Required]
public DateTime PostedTime { get; set; }
}
public class CfDb : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>().HasMany(e => e.Likes).WithMany();
modelBuilder.Entity<User>().HasMany(e => e.Friends).WithMany();
modelBuilder.Entity<Post>().HasMany(e => e.Comments).WithMany();
modelBuilder.Entity<Comment>().HasMany(e => e.Likes).WithMany();
}
}
在我的数据库中,Poster_ID 列都设置正确,所以这似乎不是问题。
谢谢您的帮助!