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(); }
public class user { [ForeignKey] public int? AddressId{get;set;} public Address{get;set;} }
外键为空,相应的导航属性才可以为可选。
实体类 我是设置为 可空,映射到数据库时,变成了 非空,外键 都是非空?
@Qlin: 不如把这几个类的代码贴出来吧。
@今昭:
问题补充了,麻烦看看
@Qlin: 你确定是ICollection?这个是一对多时使用,一个guid只可能对应一个Address。
@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(); }
红色是我修改的。
@今昭:
是 你这样的,然后生成了 数据库还是 是必须字段,不能为空。上面的错误,是 我现在的代码,改成已对多的代码,没改好,我改一下。
@Qlin: 主要看AddressId这个字段
小哥,文章第一点说的就是一对一。
我想要 一对零,或者一对一
单身1对1
单身 1对1 ,是 User 有导航属性Address, Address中没有User 对不?
我现在 实现的也是这种,但是, 创建一个用户User时,Address变成 必须字段了,必须赋值,我想实现
1对1,或者1对0