Создание нового объекта сущности ADO Model

127
16 августа 2021, 00:10

У меня есть база данных SQL с таблицами, я создаю Модель ADO.NET EDM, получаю всю базу данных в виде сущностей. При создании новых объектов и записи в базу не получается создать несколько. И так, проблему я получаю с:

public partial class Contracts
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Contracts()
    {
        this.Sales = new ObservableCollection<Sales>();
    }
    public int ContractID { get; set; }
    public System.DateTime DateOfIssue { get; set; }
    public System.DateTime DateOfExecution { get; set; }
    public virtual Customers Customers { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ObservableCollection<Sales> Sales { get; set; }
}

Я пытаюсь создать новый Contracts так:

Contracts newContr = new Contracts
                {
                    ContractID = mod.ContractID,
                    DateOfExecution = mod.DateOfExecution,
                    DateOfIssue = mod.DateOfIssue,
                    Customers = new Customers()
                };
myBase.SaveChanges();

Customers:

public partial class Customers
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Customers()
    {
        this.Contracts = new ObservableCollection<Contracts>();
    }
    public int CustomerID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string TelNumber { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ObservableCollection<Contracts> Contracts { get; set; }
}

Но получаю следующую ошибку:

UpdateException: Entities in 'MyBaseEntities.Contracts' participate in the 'FK_Contracts_Customers' relationship. 0 related 'Customers' were found. 1 'Customers' is expected.

Answer 1

Есть ещё такая возможность, но не знаю, сработает ли она у вас, но давайте попробуем. Код я пишу по памяти, потому мелкие ошибки поправите сами.

1) Создаем и привязываем Клиента (при этом мы берем ID существующего клиента в бд)

var сustomers = new Customers(){CustomerID = 2};

2) Привязывем его к контексту

myBase.Attach(сustomers);

3) Создаем Contracts

var newContr = new Contracts
{
    // ИД вы руками что ли запоняете? Это должен быть автоинкремент в БД
    // ContractID = mod.ContractID, 
    DateOfExecution = mod.DateOfExecution,
    DateOfIssue = mod.DateOfIssue,
    Customers = сustomers
};

4) Добавляем его в контекст

 myBase.Contracts.Add(newContr);

5) Сохраняем

myBase.SaveChanges(); 
READ ALSO
MySQL выборка из двух таблиц

MySQL выборка из двух таблиц

подскажите, как с помощью SQL запроса получить два поля из разных таблиц

242
Сложный UPDATE (MySQL)

Сложный UPDATE (MySQL)

Одним UPDATE надо решить следующую проблему: Если m_bid != 0 - записать это значение в smaxИначе, записать в smax наименьшее из двух значений: m_bid из shops_table,...

208
Как передать изображение из canvas по ftp

Как передать изображение из canvas по ftp

Есть скрипт создающий изображение в canvas, это изображение получается сохранить в папку, а вот передать его по ftp не удается, он создает файл...

115
Подскажите с API QIWI PHP

Подскажите с API QIWI PHP

День добрыйЮзаю исходники из гитхаба по адресу : https://github

268