1

我有两个实体用户和电话。关系是一对一的。映射是

public class User 
{
    public virtual Phone Phone { get; set;}

    public virtual int PhoneId { get; set;}
}

public class Phone 
{
    public virtual string Number { get; set;}
}

我的用户映射是:

HasRequired(x => x.Phone).WithMany().HasForeignKey(x => x.PhoneId)

我有分配电话的用户。铁

Phone oldPhone = new Phone();
Phone newPhone = new Phone();
User user = new User();
user.Phone = old;

///Save user with phone.

user.Phone = newPhone;
///Save user  with phone.

现在我有分配电话的用户 - newPhone 并且未在数据库中分配 oldPhone 行。

如何设置映射以删除没有父级(oldPhone)的实体。

已编辑。

我已根据本文将映射更改

 HasRequired(x => x.Phone).WithOptional();

为了保存,我使用这种方法:

public override void Save(TEntity entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            if (entity.Id > 0)
            {
                DbContext.Set<TEntity>().Attach(entity);
                DbContext.Entry(entity).State = System.Data.EntityState.Modified;
            }
            else
            {
                DbContext.Set<TEntity>().Add(entity);   
            }            
        } 

当我附加新实体时,旧实体不会从数据库中删除,所以在我的示例中,我在数据库 oldPhone 和 newPhone 中有两个实体。

4

1 回答 1

1

我不知道如何通过 EF 中的映射来做到这一点。对于我的一个项目,我制作了一个 Parent 属性,我可以在 Save 上进行检查。我想你可以在这里使用它。我已经用代码写了一篇博客文章;使用 parentvalidator 扩展实体框架 4。它需要将 User 属性添加到 Phone 实体。

[Parent]
public virtual User User { get; set;}
于 2012-10-29T10:11:55.690 回答