Добавление ссылки на сущность, вызывающую исключение

У меня есть модель, как показано ниже (создана с использованием подхода Model-First).

Книга является предметом продажи. DigitalDisc является предметом продажи. Это работает нормально, и данные правильно вставляются в базу данных.

Я добавляю новый объект под названием "Покупка". Одна покупка содержит несколько продаваемых предметов. После того, как я добавил эту новую связь и обновил схему базы данных, я получаю следующее исключение.

Произошла ошибка при обновлении записей.

"Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY \"FK_PurchaseSellingItem\". Конфликт произошел в базе данных \"LibraryReservationSystem\", таблице \"dbo.Purchases\", столбце 'PurchaseId'.\ R \ n Установка прекращена."}

Как это побороть?

Примечание. Мне нужно создать книгу (например, ввести данные книги в базу данных). Покупка может или не может произойти для этой книги. Когда книга создана, столбец внешнего ключа должен быть нулевым для этой книги. Но когда этот столбец обновляется, в таблице покупок должен присутствовать идентификатор. Это возможно?

Примечание. Когда я пытаюсь сделать поле "PurchasePurchaseId" обнуляемым в модели, я получаю следующую ошибку:

Ошибка 1 Ошибка 113: множественность недопустима в роли "Покупка" в отношении "Покупка SellingItem". Поскольку все свойства в зависимой роли обнуляются, кратность основной роли должна быть равна 0..1. C:\Documents and Settings\U16990\ Мои документы \Visual Studio 2010\Projects\LijosEF\LijosEF\MyModelFirstTest.edmx 35 3 LijosEF

КОД

class Program
{

    static string connectionStringVal;

    static void Main(string[] args)
    {

        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        sqlBuilder.DataSource = ".";
        sqlBuilder.InitialCatalog = "LibraryReservationSystem";
        sqlBuilder.IntegratedSecurity = true;

        // Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
        entityBuilder.Provider = "System.Data.SqlClient";
        entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
        entityBuilder.Metadata = @"res://*/MyModelFirstTest.csdl|res://*/MyModelFirstTest.ssdl|res://*/MyModelFirstTest.msl";

        connectionStringVal = entityBuilder.ToString();


        AddBook();
        AddDisc();





    }

    private static void AddBook()
    {

        //string connectionstring = "Data Source=.;Initial Catalog=SalesDB;Integrated Security=True;Connect Timeout=30";
        using (var db = new MyModelFirstTestContainer(connectionStringVal))
        {
            Book book = new Book();
            book.AvailabilityStatus = "Available";
            book.Price = 150;
            book.Title = "Maths Easy";

            db.SellingItems.AddObject(book);
            db.SaveChanges();

        }

    }

    private static void AddDisc()
    {

        //string connectionstring = "Data Source=.;Initial Catalog=SalesDB;Integrated Security=True;Connect Timeout=30";
        using (var db = new MyModelFirstTestContainer(connectionStringVal))
        {
            DigitalDisc disc = new DigitalDisc();
            disc.AvailabilityStatus = "Available";
            disc.Price = 300;
            disc.Artist = "Turtle Violin";

            db.SellingItems.AddObject(disc);
            db.SaveChanges();

        }

    }

}

ССЫЛКА:

  1. Дизайн базы данных - статьи, посты в блогах, фотографии, рассказы

  2. Могу ли я получить Entity Framework (сначала модель) для генерации составных ключей?

1 ответ

Решение

Вы настроили обязательное отношение, но сохраняете SellingItem без связи Purchase, Я ожидаю, что EF выдаст какое-то исключение перед сохранением записей в базе данных, но этого не произошло, и, скорее всего, оно попытается передать значение по умолчанию для столбца FK, а у вас нет Purchase с таким Id,

Btw. не следует ли вместо этого использовать отношение "многие ко многим", потому что предмет продажи может быть продан несколько раз, а покупка может иметь несколько предметов?

Другие вопросы по тегам