2013-12-12 3 views
2

У меня есть родительский объект с этой схемой:EntityFramework ошибка кратности при удалении элемента из коллекции

public class User : EntityBase 
{ 
    private List<UserCompany> _UserCompanies = new List<UserCompany>(); 

    // The list of companies the user can act upon, with a flag indicating their Primary company 
    public virtual List<UserCompany> UserCompanies 
    { 
     get { return _UserCompanies; } 
     set { _UserCompanies = value; } 
    } 
} 

и дочерний объект, который выглядит следующим образом:

public class UserCompany : EntityBase 
{ 
    [Required] 
    public virtual User User { get; set; } 

    [Required] 
    public virtual Company Company { get; set; } 

    [Required] 
    public virtual bool IsPrimary { get; set; } 
} 

Оба наследуют от EntityBase class:

public abstract class EntityBase 
    { 
    protected int _id; 

    /// <summary>Database record ID.</summary> 
    [DataMember(IsRequired = true)] 
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public virtual int Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 
    } 

Объекты не имеют явной конфигурации модели, за исключением этого общего е:

public EntityBaseConfiguration() 
{ 
    HasKey(m => m.Id); 
    Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
} 

Проблема у меня в том, что удаление UserCompany из результатов сбора User.UserCompanies в этой ошибки:

* Отношения от «UserCompany_User» AssociationSet находится в «Удаленные ' государство. Учитывая ограничения множественности, соответствующий «UserCompany_User_Source» также должен находиться в состоянии «Удалено». *

Моя интерпретация этой ошибки является то, что он хочет, чтобы объект User был отмечен как удаленный, а это не мое намерение. Может ли кто-нибудь сообщить, как успешно удалить объект UserCompany в этом случае (без удаления пользователя или компании)?

ответ

0

Вот что происходит. A UserCompany не может существовать без соответствующего пользователя (потому что UserCompany.User помечается как требуется. Когда вы удаляете UserCompany из коллекции UserCompanies пользователя, Entity Framework будет пытаться сделать только это: удалить ассоциацию, а не UserCompany. EF скорее ошибается на .. сторона осторожности и не предполагаю, что вы также хотите удалить объект он будет пытаться свести к нулю внешнего ключа вместо - но он не может

Таким образом, вы должны удалить объект UserCompany explcitly:

context.UserCompanies.Remove(userCompany); 

или

context.Entry(userCompany).State = EntityState.Deleted; 
Смежные вопросы