首页 新闻 赞助 找找看

Entity Framework orm框架定义关系疑问

0
悬赏园豆:100 [已解决问题] 解决于 2013-04-25 09:41

EF CodeFirst 映射关系,http://www.cnblogs.com/dudu/archive/2011/07/11/ef_one-to-one_one-to-many_many-to-many.html
这是dudu老大的文章,
现在 我有另一种需求,User表,Address表,
一个用户最多只对应一个地址,即User的一条记录,Address中有1条记录或者 0条记录与之对应。
这种实体关系 怎么定义?

问题补充:
    public class User 
    {
        public Guid Id { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime ModifiedAt { get; set; }

        public string UserName { get; set; }

        public string Password { get; set; }

        public string Email { get; set; }

        /// <summary>
        /// 最后活动时间
        /// </summary>
        public DateTime LastActivityAt { get; set; }

        public string Qrcode { get; set; }

        public Guid? AddressId { get; set; }

        public virtual  Address Address { get; set; }
   }
    public class Address 
    {
        public Guid Id { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime ModifiedAt { get; set; }

        public string Province { get; set; }

        public string City { get; set; }

        public string County { get; set; }

        public string Street { get; set; }
    }
        public UserConfiguration()
        {
            HasKey<Guid>(l => l.Id);
            Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(p => p.Password).IsRequired().HasMaxLength(64);
            Property(p => p.UserName).IsRequired().HasMaxLength(256);
            //一对一
            HasRequired(b => b.Address).WithMany();
        }
Qlin的主页 Qlin | 老鸟四级 | 园豆:2403
提问于:2013-04-23 09:56
< >
分享
最佳答案
0
public class user
{
    [ForeignKey]
    public int? AddressId{get;set;}
    public Address{get;set;}   
}

外键为空,相应的导航属性才可以为可选。

 

收获园豆:60
today4king | 老鸟四级 |园豆:3499 | 2013-04-23 10:32

实体类 我是设置为 可空,映射到数据库时,变成了 非空,外键 都是非空?

Qlin | 园豆:2403 (老鸟四级) | 2013-04-23 10:35

@Qlin: 不如把这几个类的代码贴出来吧。

today4king | 园豆:3499 (老鸟四级) | 2013-04-23 10:36

@今昭: 

问题补充了,麻烦看看

Qlin | 园豆:2403 (老鸟四级) | 2013-04-23 10:45

@Qlin: 你确定是ICollection?这个是一对多时使用,一个guid只可能对应一个Address。

today4king | 园豆:3499 (老鸟四级) | 2013-04-23 11:18

@Qlin: 

    public class User 
    {
        public Guid Id { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime ModifiedAt { get; set; }

        public string UserName { get; set; }

        public string Password { get; set; }

        public string Email { get; set; }

        /// <summary>
        /// 最后活动时间
        /// </summary>
        public DateTime LastActivityAt { get; set; }

        public string Qrcode { get; set; }
        [ForeginKey("Address")]
        public Guid? AddressId { get; set; }

        public virtual  Address Address { get; set; }
   }
    public class Address 
    {
        public Guid Id { get; set; }

        public DateTime CreatedAt { get; set; }

        public DateTime ModifiedAt { get; set; }

        public string Province { get; set; }

        public string City { get; set; }

        public string County { get; set; }

        public string Street { get; set; }
    }
        public UserConfiguration()
        {
            HasKey<Guid>(l => l.Id);
            Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(p => p.Password).IsRequired().HasMaxLength(64);
            Property(p => p.UserName).IsRequired().HasMaxLength(256);
            //一对一
            //HasRequired(b => b.Addresss).WithMany();
        }

红色是我修改的。

today4king | 园豆:3499 (老鸟四级) | 2013-04-23 11:21

@今昭: 

是 你这样的,然后生成了 数据库还是 是必须字段,不能为空。上面的错误,是 我现在的代码,改成已对多的代码,没改好,我改一下。

Qlin | 园豆:2403 (老鸟四级) | 2013-04-23 12:06

@Qlin: 主要看AddressId这个字段

today4king | 园豆:3499 (老鸟四级) | 2013-04-23 12:56
其他回答(2)
0

小哥,文章第一点说的就是一对一。

收获园豆:20
写代码的小2B | 园豆:4371 (老鸟四级) | 2013-04-23 10:00

我想要 一对零,或者一对一

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-04-23 10:11
0

单身1对1

收获园豆:20
五行缺木 | 园豆:386 (菜鸟二级) | 2013-04-23 10:05

单身 1对1 ,是 User 有导航属性Address, Address中没有User 对不?

我现在 实现的也是这种,但是, 创建一个用户User时,Address变成 必须字段了,必须赋值,我想实现
1对1,或者1对0

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-04-23 10:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册