Ну, эти две вещи противоречат друг другу:
И номер телефона, и идентификатор клиента являются столбцами идентификаторов в БД.
Но тогда ошибка:
System.Data.UpdateException: {"Невозможно вставить явное значение для столбца идентификатора в таблице 'PhoneNumber', когда для IDENTITY_INSERT задано значение OFF."}
Может показаться, что эта ошибкаговорит, что устанавливается дублирующая идентификация, но это не так - это говорит о том, что вы пытаетесь явно установить поле идентификации.
Это означает, что столбец идентификатора в PhoneNumber равен , а не поле идентификации .Или, по крайней мере, EF не думает, что это так.
Итак, у меня есть четыре вопроса:
1) Подтвердили ли вы, что в EDMX задано значение IDENTITY?Может быть, что-то изменило это?
2) Что делает метод CreateCustomer
?Это просто новый клиент и установить некоторые свойства?Оно не должно касаться полей идентификации.
3) Правильно ли настроены навигационные свойства / мощности на EDMX?Например, 1 клиент. 1- * номера телефонов.
4) Попробуйте добавить номер телефона к клиенту, а не наоборот.Имеет смысл добавить «многие» к «одному» - например, здесь указывается совокупность Customer:
var newCustomer = Customer.CreateCustomer(0, CompanyID);
newCustomer.phone1 = new PhoneNumber();
newCustomer.fax1 = new PhoneNumber();
context.Customers.AddObject(newCustomer);
context.SaveChanges();
Я бы также предложил изменить дизайн вашей модели.
Глупо иметьКлиент с 1 факсом и 1 номером телефона, каждый со свойством там.У Клиента должно быть много сущностей PhoneNumber.
Вы можете использовать TPH для сущности PhoneNumber, чтобы различать Факс и другие типы, и приведенный выше код будет иметь гораздо больший смысл:
var newCustomer = Customer.CreateCustomer(0, CompanyID);
newCustomer.Phones.Add(new FaxNumber());
newCustomer.Phones.Add(new MobileNumber());
context.SaveChanges();