asp.net-mvc – 无法在实体框架模型中的MVC 4模板中使用UserProf
发布时间:2020-12-16 07:40:14 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个自定义模型(例如博客文章),该模型与实体“UserProfile”相关,该实体由MVC 4模板中使用的WebSecurity功能用于注册和oAuth身份验证. 示例如下: public class Post{ [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
我正在尝试创建一个自定义模型(例如博客文章),该模型与实体“UserProfile”相关,该实体由MVC 4模板中使用的WebSecurity功能用于注册和oAuth身份验证.
示例如下: public class Post { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Detail { get; set; } public UserProfile User { get; set; } } 我能够正确地将当前的UserProfile关联到博客帖子,如下所示: post.User = user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == WebSecurity.CurrentUserName); db.Posts.Add(post); db.SaveChanges(); 但是当我尝试从数据库中获取Blog帖子时,我得到了一个用户的空对象: var post = db.Posts.Where(x => x.Id == postId).FirstOrDefault(); post.User is null! 我相信这是因为创建SimpleMembershipProvider时在数据库中创建的关系: WebSecurity.InitializeDatabaseConnection("DefaultConnection","UserProfile","Id","UserName",autoCreateTables: true); 我确定必须有一种方法可以忽略这些或者在我的博客类的User属性中添加一个属性来克服这个问题? 提前致谢. 解决方法
由于您没有使用预先加载(例如,通过使用.include),您必须使User属性为虚拟,因此可以通过EF延迟加载(对于DataContext,每个默认的延迟加载都是启用的 – 所以如果您没有更改此,懒加载应该工作).
public class Post { ... public virtual UserProfile User { get; set; } // navigation properties need to be virtual to support lazy loading ... } 如果您不想延迟加载,则需要包含Navigation(并执行预先加载)属性,例如: var postWithUser = db.Posts .Include(p => p.User) .Where(x => x.Id == postId) .FirstOrDefault(); 你可能会发现this article on lazy / eager loading有趣(或者只是google for EF和lazy / eager loading) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – 多选列表框中的预选项目(MVC3 Razor)
- asp.net-mvc – T4MVC @ Url.Action(MVC.Controller.Action
- asp.net – MVC3生成包含端口号的URL,如何阻止它
- ASP.NET绑定与EVAL
- asp.net-mvc – MVC存储库模式:创建模型类
- Asp.Net Core简介与安装教程
- asp.net-mvc-2 – 如何从ASP.NET页面运行冗长的任务?
- asp.net-web-api – 为什么Microsoft.Owin.Host.SystemWeb无
- asp.net-mvc-4 – 如何将自定义linq查询传递给视图
- 循环 – 如何检查我是否在ADO Recordset的最后一条记录上?
推荐文章
站长推荐
热点阅读