Не удается легко установить для свойства значение Null при редактировании объекта - PullRequest
0 голосов
/ 04 апреля 2019

В моем основном приложении asp.net с EF6 мне трудно установить для свойства значение Null.Например:

public Class A { public int Id {get; set;} public virtual B B{ get;set; } }
public Class B { public int Id {get; set;} }

//in edit method in controller:

var db_a = dbContext.A_entities
.Include(x => x.B) //if this line isn't there, then setting to null doesn't work
.Single(x => x.Id == form_a.Id);
if (form_a.B == null) {
 db_a.B = null; //this doesn't save to db unless we use .Include() above.
}

//...

dbContext.SaveChanges();

В приведенном выше примере, если у меня есть 10 свойств или если B имеет определенные свойства, использование .Include для каждого свойства становится громоздким.Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Если вы хотите удалить отношение между A и B, вы можете попытаться определить внешний ключ в A, как

public class A
{
    public int Id { get; set; }
    public string AName { get; set; }
    public int? BId { get; set; }
    public virtual B B { get; set; }
}

И затем, при удалении отношения, вам просто нужно установить BId как ноль

var a = _context.A.FirstOrDefault();
a.BId = null;
_context.SaveChanges();
0 голосов
/ 04 апреля 2019

Вы достигаете B, используя внешний ключ (отношение) через A, EF выполняет ленивую загрузку и фактически не загружает все B s для каждого A, используя Include, сообщая его активной загрузке B так что он на самом деле загружается, и вы можете установить его значение.

однако, если вам не нужно A и вы просто хотите установить для его значения B значение null, сделайте что-то вроде этого:

var b = dbContext.A_entities.SingleOrDefault(x => x.Id == form_a.Id)?.B;
if (form_a.B == null) b = null; 
...