Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 为什么实体框架先编码一对多不';我不能正常工作_Entity Framework_Linq_Code First - Fatal编程技术网

Entity framework 为什么实体框架先编码一对多不';我不能正常工作

Entity framework 为什么实体框架先编码一对多不';我不能正常工作,entity-framework,linq,code-first,Entity Framework,Linq,Code First,我有两张分类表和产品表。我已经在分类表中输入了一些数据,之后我想根据所选的分类添加一些产品。当我尝试添加产品时,它不会保存产品数据。这是我为更新或向Product表追加行而编写的函数 public void write(string Name, string Code, decimal Price, string Image, Category Category,string Description) { using (var x =

我有两张分类表和产品表。我已经在分类表中输入了一些数据,之后我想根据所选的分类添加一些产品。当我尝试添加产品时,它不会保存产品数据。这是我为更新或向Product表追加行而编写的函数

public  void write(string Name, string Code, decimal Price,
                   string Image, Category Category,string Description)
    {
       using (var x = new MyDB())
      {
            Product pro = new Product
            {
                category = Category,
                CategoryID=Category.ID,
                PName = Name,
                Code = Code,
                Image = Image,
                Description = Description,
                Price = Price
            };     
            var row = x.categorys.Find(Category.ID);
            Category.product.Add(pro); 
            x.Entry(row).CurrentValues.SetValues(Category);
            x.SaveChanges();





        }
    }
以下是我的表格:

 public class Product
{
 public Product()
    {
        this.order = new HashSet<Order>();
    }
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }
    public string PName { get; set; }
    public string Code { get; set; }
    public decimal Price { get; set; }
    public string Image { get; set; }
    public string Description { get; set; }
    public Int32 CategoryID { get; set; }
    [ForeignKey("CategoryID")]
    public Category category { get; set; }
    public virtual ICollection<Order> order { get; set; }


}
public class Category
{
    public Category()
    {
        this.product = new HashSet<Product>();
    }
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }
    [Index(IsUnique =true)]
    [Required, MaxLength(50), MinLength(1)]
    public string Name { get; set; }
    public string Description { get; set; }
    public string Image { get; set; }
    public virtual ICollection<Product> product { get; set; }
}
公共类产品
{
公共产品()
{
this.order=new HashSet();
}
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
公共Int32 ID{get;set;}
公共字符串PName{get;set;}
公共字符串代码{get;set;}
公共十进制价格{get;set;}
公共字符串图像{get;set;}
公共字符串说明{get;set;}
公共Int32类别ID{get;set;}
[外国钥匙(“类别”)]
公共类别{get;set;}
公共虚拟ICollection顺序{get;set;}
}
公共类类别
{
公共类别()
{
this.product=new HashSet();
}
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
公共Int32 ID{get;set;}
[索引(IsUnique=true)]
[必需,最大长度(50),最小长度(1)]
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串图像{get;set;}
公共虚拟ICollection产品{get;set;}
}
这是我的DbContext

public class MyDB : DbContext
{

    public MyDB()
        : base("name=MyDB")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDB, coffeeshopapp.Migrations.Configuration>("MyDB"));
    }


    public virtual DbSet<Category> categorys { get; set; }

    public virtual DbSet<Product> products { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

    }
}
公共类MyDB:DbContext
{
公共MyDB()
:base(“name=MyDB”)
{
SetInitializer(新的MigrateDatabaseToLatestVersion(“MyDB”);
}
公共虚拟数据库集类别{get;set;}
公共虚拟数据库集产品{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
}
}

有人能帮我解决这个问题吗?谢谢

首先,您必须修改您的模型,如下所示

public class Product
{

  public Product()
    {
        this.order = new HashSet<Order>();
    }

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }

    public string PName { get; set; }
    public string Code { get; set; }
    public decimal Price { get; set; }
    public string Image { get; set; }
    public string Description { get; set; }

    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    public Int32 CategoryID { get; set; }

    public virtual ICollection<Order> Orders { get; set; }


}

public class Category
{
    public Category()
    {
        this.product = new HashSet<Product>();
    }

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }

    [Index(IsUnique =true)]
    [Required, MaxLength(50), MinLength(1)]
    public string Name { get; set; }

    public string Description { get; set; }
    public string Image { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}
public  void write(string Name, string Code, decimal Price,
                   string Image, Category Category,string Description)
    {
       using (var x = new MyDB())
      {
            Product pro = new Product
            {
                Category = Category,
                PName = Name,
                Code = Code,
                Image = Image,
                Description = Description,
                Price = Price
            };     

           x.Products.Add(pro);
           x.SaveChanges();

        }
    }

首先,您必须修改您的模型,如下所示

public class Product
{

  public Product()
    {
        this.order = new HashSet<Order>();
    }

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }

    public string PName { get; set; }
    public string Code { get; set; }
    public decimal Price { get; set; }
    public string Image { get; set; }
    public string Description { get; set; }

    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    public Int32 CategoryID { get; set; }

    public virtual ICollection<Order> Orders { get; set; }


}

public class Category
{
    public Category()
    {
        this.product = new HashSet<Product>();
    }

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ID { get; set; }

    [Index(IsUnique =true)]
    [Required, MaxLength(50), MinLength(1)]
    public string Name { get; set; }

    public string Description { get; set; }
    public string Image { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}
public  void write(string Name, string Code, decimal Price,
                   string Image, Category Category,string Description)
    {
       using (var x = new MyDB())
      {
            Product pro = new Product
            {
                Category = Category,
                PName = Name,
                Code = Code,
                Image = Image,
                Description = Description,
                Price = Price
            };     

           x.Products.Add(pro);
           x.SaveChanges();

        }
    }

谢谢你的快速回答!但是,当我根据您的修改运行代码时,我得到了以下信息:EntityFramework.dll中发生了类型为“System.InvalidOperationException”的未经处理的异常。其他信息:entity对象不能被多个IEntityChangeTracker实例引用。您能在更改后显示您的
保存
零件吗(var x=new MyDB()){Product pro=new Product{Category=Category,PName=Name,Code=Code,Image=Image,Description=Description,Price=Price};x.products.Add(pro);x.SaveChanges();}'这里似乎是小写的
x.products
?是打字错误吗?好的,如果您遵循本EF教程,我非常确定您可以解决上述基本问题。在遵循教程并根据
code-first约定修改代码后,仍然存在问题,请与我联系。我将帮助您。首先,您必须修改代码根据约定创建。这是必须的。以下是教程:感谢您的快速回答!但是当我根据您的修改运行代码时,我得到了以下信息:EntityFramework.dll中发生了类型为“System.InvalidOperationException”的未经处理的异常。其他信息:实体对象不能被多个实例引用使用(var x=new MyDB()){Product pro=new Product pro=new Product()可以向我展示更改后保存的
部件吗{Category=Category,PName=Name,Code=Code,Image=Image,Description=Description,Price=Price};x.products.Add(pro);x.SaveChanges();}'这里似乎是小写的
x.products
?是打字错误吗?好的,如果您遵循本EF教程,我非常确定您可以解决上述基本问题。在遵循教程并根据
code-first约定修改代码后,仍然存在问题,请与我联系。我将帮助您。首先,您必须修改代码根据惯例创建基础。这是必须的。以下是教程: