2015-11-20 3 views
0

У меня есть класс box, который содержит несколько свойств, один из которых является счетчиком для идентификатора, который увеличивается каждый раз, когда инициализируется новый объект, а другой - List<Item>, который содержит много объектов типа Item, это еще один класс со своими собственными свойствами (имя, вес и т. Д.). Я пытаюсь создать базу данных для этого приложения, но я действительно не знаю, как представить свое свойство List<Item> в моей базе данных. Я новичок, особенно в базах данных в C#, поэтому, пожалуйста, будьте как можно яснее.Список объектов в качестве свойства класса

EDIT

Item.cs

class Item 
{ 
    private string name; 
    private int price; 
    private int weight; 

    public Item() { } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public int Weight 
    { 
     get { return weight; } 
     set { weight = value; } 
    } 

    public int Price 
    { 
     get { return price; } 
     set { price = value; } 
    } 
} 
+0

вы можете показать код для класса 'Item'? – simonalexander2005

+0

Можно ли связать один элемент с более чем одной коробкой? –

+0

Да, он может присутствовать в нескольких ящиках. – Koosshh56

ответ

1

Если Box имеет коллекцию Item объектов, то база данных будет иметь две таблицы для этого:

Boxes 
---------- 
ID 
Name 
etc. 

Items 
---------- 
ID 
BoxID 
Name 
etc. 

вещи, как Name и etc. - это свойства, которые описывают любой данный экземпляр этого типа. Значения ID являются уникальными идентификаторами для элементов. Здесь следует обратить внимание на колонку BoxID в Items. Для любого заданного Item есть ссылка на Box, которая содержит его.

Итак, при сохранении объекта Box базы данных сначала вы сохраните объект, а затем, учитывая его ID, сохраните все объекты Item.

Это называется отношением «один ко многим». «Один» Box имеет «много» (ноль или более, в данном случае) Item s.


Edit: Основываясь на ваш комментарий ниже, вы имеете в виду, что это будет отношения многие-ко-многим? Если это так, тогда вам понадобится таблица для хранения самой связи. Что-то вроде этого:

Boxes 
---------- 
ID 
Name 
etc. 

Items 
---------- 
ID 
Name 
etc. 

BoxItems 
---------- 
BoxID 
ItemID 

Любой Box может относиться ко многим Item с и любой Item может относиться ко многим Box эс. Считайте, что отношение себя является «сущностью» в модели.

Чтобы визуализировать это, очень распространенным примером является фильм и актеры. У вас может быть коллекция фильмов и коллекция актеров, и они четко связаны. Но сама связь - это сущность с ее собственными описывающими элементами. Отношения связаны с фильмом, а также ссылки на актера, но также содержат информацию типа «Имя персонажа» или «Договорная зарплата».

Примечание: Этот подход действительно не имеет смысла, по крайней мере семантически, для вашего домена. Как один Item существует одновременно в нескольких Box es?

+0

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

+0

У вас не может быть много-много отношений в реляционной базе данных без промежуточной таблицы. –

+0

Я знаю, это моя проблема. Мне нужна таблица ссылок. Но что я должен положить в эту таблицу. – Koosshh56

2

Прежде всего вам понадобятся как минимум две таблицы, одна для ящиков и одна для предметов.Если один элемент может принадлежать более чем одной коробке, а также один ящик, имеющий много элементов, вы будете нуждаться в посредническую таблицу (см):

enter image description here

В таблицах контейнера вы должны иметь:

  1. ContainerID
  2. FK_BoxID
  3. FK_ItemID
  4. и т.д ...

В таблицах графах вам потребуется:

  1. BoxID
  2. [связанных коробка полей]

В таблице Items вам потребуется:

  1. Itemid
  2. [Предметные вопросы]
+0

Почему «по крайней мере» 2? По крайней мере 1 нормально. –

+2

На самом деле вам нужно как минимум 3 для правильной связи между ними в реляционной базе данных. –

+1

Итак, я должен использовать ID для элемента. И таблица ссылок использует boxId и itemId как внешний ключ. Это действительно понятно, спасибо – Koosshh56

0

Если вы хотите иметь отношения один-ко-многим ваши классы будут выглядеть следующим образом:

public class Box 
{ 
    public Box() { } 

    public int BoxId { get; set; } 
    public string BoxName { get; set; } 

    public virtual Item Item { get; set; } 
} 

public class Item 
{ 
    public Item() 
    { 
     Boxes = new List<Box>(); 
    } 
    public int ItemId { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<Box> Boxes { get; set; } 
} 

Выполните статью ниже, это также объясняет, как создавать внешние ключи и все.

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

Смежные вопросы