1

我无法更新导航属性我有两个实体:用户

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 方法中,实体状态被修改。但用户 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);
}

我正在使用统一框架和通用存储库模式。我试图将所有属性设置为虚拟但没有效果。

4

1 回答 1

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; }
}

但为了清楚起见,Entity Framework 不是魔术师(从句...)。对于您的架构,您必须手动更新两个外键(如果您想保留您的 AddressId 和 UserId 属性)。

于 2013-08-20T08:58:52.503 回答