Я следующая структуру в SQL Server DBEf6 не обновляет, вставляет только
компании -> Отрасли -> BranchTelephone -> TelephoneNumber
Таким образом, компания имеет много ветвей, которые имеют много telephonenumbers. Отраслевая TelephoneNumber многие к многим
Вот Entity классы:
public class Company
{
public Company()
{
this.Branches = new HashSet<Branch>();
}
[Key]
//identity column in sql server
public int Id{ get; set; }
public string Name{ get; set; }
public virtual ICollection<Branch> Branches{ get; set; }
}
public partial class Branch
{
/// <summary>
/// Initializes a new instance of the <see cref="Branch"/> class.
/// </summary>
public Branch()
{
this.TelephoneNumbers = new HashSet<TelephoneNumber>();
}
[Column("BranchID")]
[Key]
public int Id { get; set; }
public int CompanyId{ get; set; }
public virtual Company Company { get; set; }
public virtual ICollection<TelephoneNumber> TelephoneNumbers { get; set; }
}
public partial class TelephoneNumber
{
public TelephoneNumber()
{
this.Branches = new HashSet<Branch>();
}
[Key]
[Column("TelephoneID")]
public int Id { get; set; }
public virtual ICollection<Branch> Branches { get; set; }
}
Я пытаюсь сделать следующее, чтобы проверить настройки:
var t1 = new TelephoneNumber();
var t2 = new TelephoneNumber();
using(var context = new MyDbContext())
{
var company = new Company
{
Name = "C1",
Branches =
{
new Branch
{
TelephoneNumbers = {t1, t2}
}
}
};
context.SaveChanges();
}
На данный момент смотрят SQAl Profiler сервера и runnign SQL, все данные
вставлены правильно
using(var c2 = new MyDbContext())
{
var company2 = c2 .Companies.First(x=>x.Name == "C1");
var b1 = company2 .Branches.First();
//data matches what is inserted above
b1.TelephoneNumbers.Clear();
b1.TelephoneNumbers.Add(new TelephoneNumber());
company2.Name = "Updated";
c2.SaveChanges();
}
Atfer выше сохранить изменения followign заявления получить genrated на SQL сервере
1. Update Company set name = "Updated" -- Correct
2. Delete from BranchTelephone the two entries that were added during first insert
3. Insert New Company
4. Insert new Branch
5. Insert new Telephone Number
6. Insert new Branch Telephone
7. Insert new Telephone Number
8. Insert new Branch Telephone
9. Insert new Telephone Number
10. Insert new Branch Telephone
Так в основном он обновляет и удаляет как ожидалось.
Но затем идти о воссоздании все от одного шага, так что у меня есть в общей сложности 3 телефонных номеров вместо 1.
Я понятия не имею, что здесь происходит. Любая помощь будет оценена по достоинству.
спасибо.
Я играл и оказывается
все нормально, если я ommit следующие строки: b1.TelephoneNumbers.Add (новый TelephoneNumber());
В порядке я имею в виду, что он обновляет данные и удаляет все связанные телефонные номера. Но если я делаю выше строки в том же контексте, то он забывает обо всем остальном и просто вставляет все новые, т. Е. Новую компанию, филиал и 3 телефонных номера (включая два удаленных).
Это просто неприемлемо. Что я делаю неправильно здесь
Необходимо пометить дочерние объекты как измененные. Это боль. Вы также можете использовать GraphDiff. http://stackoverflow.com/questions/24789903/updating-child-entities-in-entity-framework-mvc –
Это было проблемой. Одно из сущностей было из отдельного экземпляра контекста db, следовательно, создавая все это. – ASR