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) 

我有指定的電話用戶。 f1。

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行中的DB。

我怎樣才能建立映射刪除實體無父(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 oldPhone和newPhone中有兩個實體。

+0

首先,您的房屋應該是正確的。 'WithMany()'不是1:1。其次,在你的例子中究竟發生了什麼,你沒有想到?並且'用手機保存用戶'後面應該寫些什麼代碼? –

+0

固定第一和第二和第三 –

回答

1

我不知道的方式,通過映射在EF做到這一點。對於我的一個項目,我創建了一個Parent屬性,我可以在Save上查看。我想你可以在這裏使用它。我使用代碼編寫了一篇關於此的博客文章; extending entity framework 4 with parentvalidator。 它需要將用戶屬性添加到電話實體。

[Parent] 
public virtual User User { get; set;}