我无法更新导航属性 我有两个实体:用户
public class User : Entity
{
public string Username { get; set; }
public string Password { get; set; }
public int? AddressId { get; set; }
public virtual Address Address { get; set; }
}
和地址
public class Address : Entity
{
public string AddressName { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
}
当我尝试做以下事情时:
address.User = user;
成功地解决userId更新,并且在commit方法中,实体状态为Modified。 但是用户AddressId不会更新。
这是我的背景
public DbSet<User> Users { get; set; }
public DbSet<Address> Addresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOptional(x=>x.Address)
.WithMany()
.HasForeignKey(x=>x.AddressId)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
我正在使用统一框架和基因存储库模式。 我试图将所有属性设置为虚拟但没有效果。
答案 0 :(得分:0)
我认为这里存在一个概念问题,超出了你的外键问题。
如果您的AddressId
课程中已有Address
个对象,为什么要引用User
?你的Address
课程也是如此。
也许你应该尝试这样的事情:
public class User : Entity
{
public string Username { get; set; }
public string Password { get; set; }
public virtual Address Address { get; set; }
}
public class Address : Entity
{
public string AddressName { get; set; }
public virtual User User { get; set; }
}
但是为了说清楚,实体框架不是一个神奇的向导(条款......)。使用您的体系结构,您必须手动更新BOTH外键(如果您想保留AddressId和UserId属性)。