2016-10-30 2 views
-5

Это мой класс Igra, он имеет основные атрибуты.Entity Framework C#

public class Igra 
{ 
    public int IgraId { get; set; } 
    public string imeIgre { get; set; } 

    public string zvrstIgre { get; set; } 

    public virtual List<Prodajalna> Prodajalna { get; set; } 
} 

Это мой класс Prodajalna, он также имеет основные атрибуты.

public class Prodajalna 
{ 
    public int ProdajalnaId { get; set; } 
    public string imeProdajalne { get; set; } 

    public string naslovProdajalne { get; set; } 

    public int IgraId; 
    public virtual Igra igra{get;set; 
} 

Они оба устанавливаются через службу ASMX. Теперь, когда я делаю это в моем Entity Framework контексте:

Igra i1 = new Igra() { imeIgre = "WoW", zvrstIgre = "MMORPG", 
         Prodajalna = new List<Prodajalna>() 
        }; 
Igra i2 = new Igra() { imeIgre = "LoL", zvrstIgre = "MOBA", 
         Prodajalna = new List<Prodajalna>() }; 
Igra i3 = new Igra() { imeIgre = "Diablo", zvrstIgre = "heh", 
         Prodajalna = new List<Prodajalna>() }; 

i1.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Bolha", 
            naslovProdajalne = "Maribor" }); 
i1.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj", 
            naslovProdajalne = "Ljubljana" }); 

i2.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj2", 
            naslovProdajalne = "Koper" }); 

i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj2", 
            naslovProdajalne = "Maribor" }); 
i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj", 
            naslovProdajalne = "Ljubljana" }); 
i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj2", 
            naslovProdajalne = "Koper" }); 

Так вот, я добавил несколько игр и магазинов, не составило большого труда. Теперь после того, как я запускаю эту функцию:

List<Prodajalna> vse_prodajalne = gameshop.izpisi_vse_prodajalne(); 

foreach (Prodajalna p in vse_prodajalne) 
    Console.WriteLine(p.imeProdajalne); 

Это будет выписывать все магазины, поэтому программа будет написать:

Bolha 
Nekaj 
Nekaj2 
Nekaj 
Nekaj2 

Проблема заключается в том, что она должна только выписать:

Bolha 
Nekaj 
Nekaj2 

поэтому он избыточен в моей базе данных.

UPDATE 1/1 Я обновил свой код, но он все еще не работает

public class ProdajalnaVsebujeIgroContext : DbContext 
    { 
     public DbSet<Igra> Igre { get; set; } 
     public DbSet<Prodajalna> Prodajalne { get; set; } 

     public ProdajalnaVsebujeIgroContext()//help 
     { 
      Database.SetInitializer<ProdajalnaVsebujeIgroContext>(new PVIInit()); 
      this.Configuration.ProxyCreationEnabled = false; 
      this.Configuration.LazyLoadingEnabled = false; 
     } 


     public class PVIInit : DropCreateDatabaseAlways<ProdajalnaVsebujeIgroContext> 
     { 
      protected override void Seed(ProdajalnaVsebujeIgroContext context) 
      { 

       var p = new Prodajalna() { imeProdajalne = "Nekaj2", naslovProdajalne = "Koper" }; 
       ProdajalnaVsebujeIgroContext. 
       context.SaveChanges(); 
       context.Prodajalne.Add(p); 


       Igra i1 = new Igra() { imeIgre = "WoW", zvrstIgre = "MMORPG", Prodajalna = new List<Prodajalna>() }; 
       Igra i2 = new Igra() { imeIgre = "LoL", zvrstIgre = "MOBA", Prodajalna = new List<Prodajalna>() }; 
       Igra i3 = new Igra() { imeIgre = "Diablo", zvrstIgre = "heh", Prodajalna = new List<Prodajalna>() }; 

       i1.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Bolha", naslovProdajalne = "Maribor" }); 
       i1.Prodajalna.Add(new Prodajalna() { imeProdajalne = p.imeProdajalne, naslovProdajalne = "Ljubljana" }); 

       i2.Prodajalna.Add(new Prodajalna() { imeProdajalne = p.imeProdajalne, naslovProdajalne = "Koper" }); 

       i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = p.imeProdajalne, naslovProdajalne = "Maribor" }); 
       i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj", naslovProdajalne = "Ljubljana" }); 

       i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = p.imeProdajalne, naslovProdajalne = "Koper" }); 

       context.Igre.Add(i1); 
       context.Igre.Add(i2); 
       context.Igre.Add(i3); 
       base.Seed(context); 
+0

И ваш вопрос ...? – Amy

+0

Как сделать так, что он будет выписывать только один раз, как указано в конце моего вопроса –

ответ

0

Проблема с этими 2 строками:

i2.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj2", naslovProdajalne = "Koper" }); 
i3.Prodajalna.Add(new Prodajalna() { imeProdajalne = "Nekaj2", naslovProdajalne = "Koper" }); 

То, что вы действительно хотите для создания единственного Prodajalna и его повторного использования. Самый простой способ добиться этого - сначала сохранить объект и повторно использовать его.

var p = new Prodajalna() { imeProdajalne = "Nekaj2", naslovProdajalne = "Koper" }; 
_dbContext.Prodajalna.Add(p); 
_dbContext.Save(); 

i2.Prodajalna.Add(p); 
i3.Prodajalna.Add(p); 
+0

что такое _dbContext и _datacontext? –

+0

извините, это те же самые вещи, я обновил свой ответ. ваш _dbContext - это ваш контекст данных EF. 'public class YourNameHere: DbContext' – jhilden

+0

Мое контекстное имя - ProdajalnaVsebujeIgroContext, и если я пытаюсь написать .Prodajalna ему не находит, он имеет только две функции, равные и ReferenceEquals –