【问题标题】:Entity Framework c#实体框架 c#
【发布时间】:2016-10-30 19:55:46
【问题描述】:

这是我的班级Igra,它具有基本属性。

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

所以它在我的数据库中是多余的。

更新 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);

【问题讨论】:

  • 你的问题是......?
  • 如何让它只写出一次,如我的问题末尾所述

标签: c# entity-framework


【解决方案1】:

问题在于这两行:

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

【讨论】:

  • 什么是_dbContext和_datacontext?
  • 对不起,这些是一样的,我更新了我的答案。您的 _dbContext 是您的 EF 数据上下文。 public class YourNameHere : DbContext
  • 我的上下文名称是 ProdajalnaVsebujeIgroContext,如果我尝试将 .Prodajalna 写入它没有找到它,它只有两个函数,即 equals 和 ReferenceEquals
  • 更新了我的答案,还是不知道怎么解决
  • 将 SaveChanges() 调用移至 .Add() 调用之后。
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2016-08-04
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多