实体框架一对一关系都是必需的

时间:2011-09-13 23:57:41

标签: entity-framework

您好我有一个数据库设置如下:

User属于Area

public class User : IEntity
    {
        public int UserId { get; set; }
        public string Username { get; set; }
        public int AreaId { get; set; }
        public string CreatedByUserName { get; set; }
        public DateTime CreatedDateTime { get; set; }
        public string LastModifiedByUserName { get; set; }
        public DateTime? LastModifiedDateTime { get; set; }

        //Navigation properties
        public virtual Area Area { get; set; }
    }

它的Area DefaultAdmin类型为User

    public class Area : IEntity
        {
            public virtual int Id { get; set; }
            public virtual string Name { get; set; }
            public virtual int DefaultAdminId { get; set; }
            public string CreatedByUserName { get; set; }
            public DateTime CreatedDateTime { get; set; }
            public string LastModifiedByUserName { get; set; }
            public DateTime? LastModifiedDateTime { get; set; }
    }


 // Navigation properties
        public virtual User DefaultAdmin { get; set; }
    }

甚至可以设置这样的东西吗?它们都需要彼此,所以当从这些表开始为空时,你永远不能创建一个,因为前者需要后者。

1 个答案:

答案 0 :(得分:1)

假设基础表模式对外键有NOT NULL约束,那么这组关系在数据库方面也会有问题(即使将EntityFramework从图片中删除)

您将能够执行以下操作之一:

a)重新考虑区域和用户之间的关系

b)或者如果描述的关系确实准确:

  • 暂时放宽要求,以便可以创建没有区域的第一个用户
  • 创建第一个用户(可能是AdminUser)
  • 使用第一个用户创建第一个区域作为DefaultAdmin
  • 将第一个用户与上一步中创建的区域相关联
  • 恢复问题
  • 中描述的关系要求

上述步骤可以在部署数据库时作为数据库初始化脚本的一部分完成。一旦存在第一个区域和用户,您就可以在不违反所述要求的情况下添加更多区域。

我应该指出,这些关系实际上不是一对一,如问题标题所述:

  • 用户可以是许多区域(1到多个)的DefaultAdmin
  • 区域可以有多个用户(1到多个)

希望有帮助...