我有两个实体用户和手机。关系是一对一的。映射是
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)
我有分配电话的用户。 f.e。
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)。
编辑。
我已根据this文章更改了地图
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);
}
}
当我附加新实体时,旧的实体不会从DB中删除,因此在我的示例中,我在DB oldPhone和newPhone中有两个实体。
答案 0 :(得分:1)
我不知道通过EF中的映射来实现这一目的。对于我的一个项目,我创建了一个Parent属性,我可以在Save上查看。我想你可以在这里使用它。我用这个代码发了一篇博文。 extending entity framework 4 with parentvalidator。 它需要将User属性添加到Phone实体。
[Parent]
public virtual User User { get; set;}