2016-10-30 128 views
-5

这是我的课Igra,它具有基本属性。实体框架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服务设置的。现在,当我做这在我的实体框架背景:

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

的问题是与这两条线:

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数据上下文。 '公共类YourNameHere:DbContext' – jhilden

+0

我的上下文名称是ProdajalnaVsebujeIgroContext,如果我尝试写入.Prodajalna它没有找到它,它只有两个函数,它们是equals和ReferenceEquals –