обновление столбца внешнего ключа в sql из C # с помощью linq - PullRequest
0 голосов
/ 24 апреля 2018

Я делаю приложение под Windows в C #, используя Linq.Я пытаюсь обновить столбец внешнего ключа, но получаю сообщение об ошибке:

«Операция недействительна из-за текущего состояния объекта.»

Окно сообщения об ошибке указывает на строку:

throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

Я использовал следующий метод для обновления:

//Updates a Product
public void UpdateProduct(int productID, string productName, int categoryID, int supplierID, bool priceType, decimal costPrice, decimal retailPrice, bool inStock)
{
    Product product = (from p in db.Products
                       where p.ProductId == productID
                       select p).Single();

    product.Name = productName;
    product.CategoryId = categoryID;
    product.SupplierId = supplierID;
    product.PriceType = priceType;
    product.CostPrice = costPrice;
    product.RetailPrice = retailPrice;
    product.Stock = inStock;

    db.SubmitChanges();
}

В чем проблема?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Ошибка возникает, если свойства навигации уже загружены со значениями, которые не совпадают с новым идентификатором, который вы пытаетесь установить.

Вместо установки значений идентификатора, попробуйте установить свойства навигации, напримерэто:

public void UpdateProduct(int productID, string productName, int categoryID, int supplierID, bool priceType, decimal costPrice, decimal retailPrice, bool inStock)
{
    Product product = (from p in db.Products
                       where p.ProductId == productID
                       select p).Single();

    Category cat = (from c in db.Categories
                    where c.CategoryId == categoryID
                    select c).FirstOrDefault();

    Supplier sup = (from s in db.Suppliers
                    where s.SupplierID == supplierID
                    select s).FirstOrDefault();

    product.Name = productName;
    product.Category = cat;
    product.Supplier = sup;
    product.PriceType = priceType;
    product.CostPrice = costPrice;
    product.RetailPrice = retailPrice;
    product.Stock = inStock;

    db.SubmitChanges();
}
0 голосов
/ 24 апреля 2018

может быть связано с этими Linq to SQL ForeignKeyReferenceAlreadyHasValueException и Как изменить значение связанного поля

Извините, у меня недостаточно репутации для записикомментарий, поэтому публиковать это как ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...