2016-10-30 2 views
-5

C'est ma classe Igra, elle possède les attributs de base.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; } 
} 

Ceci est ma classe Prodajalna, il a aussi les attributs de base.

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; 
} 

Ils sont tous les deux configurés via le service ASMX. Maintenant, quand je fais cela dans mon contexte 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" }); 

Donc ici, je viens d'ajouter quelques jeux et magasins, pas de problème. Maintenant, après que je lance cette fonction:

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

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

Il va écrire tous les commerces, de sorte que le programme va écrire:

Bolha 
Nekaj 
Nekaj2 
Nekaj 
Nekaj2 

Le problème est qu'il ne devrait écrire:

Bolha 
Nekaj 
Nekaj2 
Il est donc redondant dans ma base de données. Il s'agit d'un

.

MISE A JOUR 1/1 J'ai mis à jour mon code, mais il ne fonctionne toujours pas

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

Et votre question est ...? – Amy

+0

Comment faire en sorte qu'il écrira seulement ceux-là une fois, comme indiqué à la fin de ma question –

Répondre

0

La question est avec ces 2 lignes:

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

Qu'est-ce que vous voulez vraiment est pour créer un seul Prodajalna et le réutiliser. La manière la plus simple d'y parvenir est de sauvegarder l'objet en premier et de le réutiliser.

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

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

ce qui est le _dbContext et _datacontext? –

+0

désolé, ce sont la même chose, j'ai mis à jour ma réponse. votre _dbContext est votre contexte de données EF. 'public class YourNameHere: DbContext' – jhilden

+0

Mon nom de contexte est ProdajalnaVsebujeIgroContext, et si j'essaie d'écrire .Prodajalna ne le trouve pas, il n'a que deux fonctions qui sont égales et ReferenceEquals –