首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架CTP4建模和映射问题/问题

实体框架CTP4建模和映射问题/问题
EN

Stack Overflow用户
提问于 2010-09-07 02:27:55
回答 1查看 184关注 0票数 0

我有一个网站,允许用户在主网站中创建尽可能多的微型网站,因为他们喜欢。用户还可以将其他用户设置为其微型站点的版主,并且用户可以关注其他微型站点。我不确定我做错了什么(这似乎适用于CTP3),但是当我尝试做一些简单的事情时,比如

代码语言:javascript
复制
var site = _siteRepo.SingleOrDetault(x => x.Id == id);

site.Moderators.Add(user1);

我得到一个System.NullReferenceException:object引用没有设置为一个对象的实例。

这就是我的实体的样子和我映射它们的方式。

代码语言:javascript
复制
 public class User : IEntity
    {
        private DateTime _createdAt;
        private DateTime _lastActivityAt;
        public User()
        {
            _createdAt = SystemTime.Now();
            _lastActivityAt = SystemTime.Now();
        }

        public virtual long Id { get; private set; }
        public virtual string Email { get; set; }
        public virtual string Name { get; set; }
        public virtual string PasswordHash { get; set; }
        public virtual string PasswordSalt { get; set; }
        public virtual bool IsConfirmed { get; set; }
        public virtual ICollection<Site> Moderator { get; set; }
        public virtual ICollection<Site> Following { get; set; }
        public virtual ICollection<Site> Sites { get; set; }
        public virtual DateTime LastActivityAt
        {
            [DebuggerStepThrough]
            get { return _lastActivityAt; }
            [DebuggerStepThrough]
            set { _lastActivityAt = value; }
        }
        public virtual DateTime CreatedAt
        {
            [DebuggerStepThrough]
            get { return _createdAt; }
            [DebuggerStepThrough]
            set { _createdAt = value; }
        }

        public Role Role
        {
            get { return (Role) InternalRole; }
            set { InternalRole = (int) value; }
        }
        [EditorBrowsable(EditorBrowsableState.Never)]
        public virtual int InternalRole
        {
            [EditorBrowsable(EditorBrowsableState.Never)]
            get;
            [EditorBrowsable(EditorBrowsableState.Never)]
            set;
        }
    }

public class Site : IEntity
    {
        private DateTime _createdAt;

        public Site()
        {
            _createdAt = SystemTime.Now();
        }
        public virtual long Id { get; set; }
        public virtual string Slug { get; set; }
        public virtual bool IsPrivate { get; set; }
        public virtual bool IsActive { get; set; }
        public virtual bool IsAdminRestricted { get; set; }
        public virtual bool HasDonationPage { get; set; }
        public virtual SiteData SiteData { get; set; }
        public virtual Theme Theme { get; set; }
        public virtual User User { get; set; }
        public virtual ICollection<User> Moderators { get; set; }
        public virtual ICollection<User> Following { get; set; }
        public virtual ICollection<SiteAnnouncement> SiteAnnouncements { get; set; }
        public virtual ICollection<SiteLink> SiteLinks { get; set; }
        public virtual ICollection<SitePost> SitePosts { get; set; }
        public virtual SiteDonation SiteDonation { get; set; }
        public virtual DateTime CreatedAt
        {
            get { return _createdAt; }
            set { _createdAt = value; }
        }

    }


        public UserMap()
        {
            HasKey(u => u.Id);
            Property(u => u.Id).IsIdentity();
            Property(u => u.Name).IsRequired().IsVariableLength().HasMaxLength(75);
            Property(u => u.Email).IsRequired().IsVariableLength().HasMaxLength(75);
            Property(u => u.PasswordHash).IsRequired().IsVariableLength().HasMaxLength(215);
            Property(u => u.PasswordSalt).IsRequired().IsVariableLength().HasMaxLength(88);
            Property(u => u.IsConfirmed);
            Property(u => u.LastActivityAt);
            Property(u => u.CreatedAt);
            Property(u => u.InternalRole);
            MapSingleType(u => new
                                   {
                                       u.Id,
                                       u.Name,
                                       u.Email,
                                       u.PasswordHash,
                                       u.PasswordSalt,
                                       u.IsConfirmed,
                                       Role = u.InternalRole,
                                       u.LastActivityAt,
                                       u.CreatedAt
                                   }).ToTable("User");
        }

        public SiteMap()
        {
            HasKey(s => s.Id);
            Property(s => s.Id).IsIdentity();
            Property(s => s.HasDonationPage);
            Property(s => s.IsActive);
            Property(s => s.IsAdminRestricted);
            Property(s => s.IsPrivate);
            Property(s => s.Slug).IsRequired().IsVariableLength().HasMaxLength(125);
            Property(s => s.CreatedAt);
            MapSingleType(s => new
                                   {
                                       s.Id,
                                       ThemeId = s.Theme.Id,
                                       UserID = s.User.Id,
                                       s.HasDonationPage,
                                       s.IsActive,
                                       s.IsAdminRestricted,
                                       s.IsPrivate,
                                       s.Slug,
                                       s.CreatedAt
                                   }).ToTable("Sites");
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-09 16:02:21

在向ICollection添加对象之前,需要为其检查属性为空。

或者在构造函数中设置默认值:

代码语言:javascript
复制
public User()
        {
            _createdAt = SystemTime.Now();
            _lastActivityAt = SystemTime.Now();
            Moderator = new List<Site>();
            Following = new List<Site>();
            Sites = new List<Site>();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3653581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档