子オブジェクトのコレクションを持つ親オブジェクトがあります。 EF Code Firstを使用してこのデータをDBに保存します。 いくつかの奇妙な理由により、親オブジェクトは保存されますが、子オブジェクトは保存されません。ここで子オブジェクトがEntity Frameworkコードを使用してDBに保存されていません。
は私のコードです:
class Person
{
public Person()
{
Operations = new ICollection<Operation>();
}
public int Id { get; set; }
public virtual ICollection<Operation> Operations { get; set; }
}
public class Operation
{
public int Id { get; set; }
public string Data { get; set; }
public int PersonId { get; set; }
public virtual Person Person{ get; set; }
}
ここであなたDAL UpdateMethodです:
public bool UpdatePerson entity)
{
//_context.Set<Person>().AddOrUpdate(entity);
var entityInDb = _context.Persons.Find(entity.Id);
_context.Entry(entityInDb).CurrentValues.SetValues(entity);
_context.Entry(entityInDb).State = EntityState.Modified;
return _context.SaveChanges() > 0;
}
そして、ここBLLです:
//Create a new person if it does not exist. If exists, add only the Operations:
//check if such the person exists in the DB
var person = Repository.Filter(p=>p.Id == Id)
.AsNoTracking().FirstOrDefault();
//if not, create a new record
if(person == null)
{
personNew = new Person{
...
};
bool res = Repository.Insert(personNew);
if (res)
{
//find newly created person
person = Repository.Filter(p => p.Id == ...)
.AsNoTracking().FirstOrDefault();
}
}
//Add Operations to the Person entity and Save them:
var op = obj.ToOperationModel();
op.PersonId = person.Id;
person.Operations.Add(op);
var res2 = Repository.Update(person);
エラー、親オブジェクト(人は)ありませんres2はtrueを返しますが、操作はDBに追加されません
私はこの1つは、それを削除してみてください、問題になることができると思います: 'AsNoTracking()' – bnu