2016-02-04 2 views
0

у меня есть этот классEF Code First Update не работает

public class BankAccount : IEntity 
{ 
    public int Id { get; set; } 
    public long AccountNumber { get; set; } 
    public string Description { get; set; } 
    public bool IsFund { get; set; } 

    public virtual Person Owner { get; set; } 
    public virtual Branch Branch { get; set; } 

    public BankAccount() 
    { 
     AccountNumber = 0; 
     IsFund = false; 
     Description = "Empty"; 
    } 
} 

и обновление метод: (филиал, описание владельца) значение

public void Update(DBS.BankAccount entity) 
{ 
    try 
    { 
     using (var _nahidContext = new NahidContext()) 
     { 
      var bankAccountElement= FindById(entity.Id); 
      _nahidContext.Entry(bankAccountElement).State = System.Data.Entity.EntityState.Modified; 
      var bankAccount = _nahidContext.Entry(bankAccountElement); 
      bankAccount.CurrentValues.SetValues(entity); 
      _nahidContext.SaveChanges(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new ArgumentException(ex.Message); 
    } 
} 

, когда я запустить метод обновления и изменения только описание меняется и владелец, филиал не имеет никаких изменений. Как я могу изменить владельца или филиал? [Спасибо]

+0

Это потому, что Owner и Branch являются классами и должны быть ссылкой (с внешним ключом), а описание - это строка. –

+0

BankAccount имеет внешний ключ с владельцем и филиалом. – user3194835

+0

как я могу сменить филиал и владельца ??? – user3194835

ответ

0

Есть два пути, которые я знаю, чтобы решить эту проблему.

Добавить внешний ключ в собственность:

public class BankAccount : IEntity 
{ 
    public int Id { get; set; } 
    public long AccountNumber { get; set; } 
    public string Description { get; set; } 
    public bool IsFund { get; set; } 

    public int OwnerID { get; set; } 
    [ForeignKey("OwnerID")] 
    public virtual Person Owner { get; set; } 

    public int BranchID { get; set; } 
    [ForeignKey("BranchID")] 
    public virtual Branch Branch { get; set; } 

    public BankAccount() 
    { 
     AccountNumber = 0; 
     IsFund = false; 
     Description = "Empty"; 
    } 
} 

Это должно обновить отношения, но не Person или Branch. Их необходимо обновлять отдельно, так же, как вы обновляете BankAccount.

Обновление связанного путем назначения владельца и филиала.

public void Update(DBS.BankAccount newBankAccount) 
{ 
    try 
    { 
     using (var _nahidContext = new NahidContext()) 
     { 
      BankAccount oldBankAccount = FindById(entity.Id); 

      oldBankAccount.Owner = newBankAccount.Owner; 
      oldBankAccount.Branch = newBankAccount.Branch; 
      oldBankAccount.CurrentValues.SetValues(newBankAccount); 

      _nahidContext.SaveChanges(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new ArgumentException(ex.Message); 
    } 
} 

Это будет, однако, создать новый Person и новый Branch.

+0

большое спасибо. – user3194835

Смежные вопросы