zoukankan      html  css  js  c++  java
  • 【EF】疑难杂症

    用户和购物车数据  主从表

    添加 ADO.NET实体数据类型

      [Test]
            public void EntiyConnect()
            {
                var context = new projectDatabaseEntities();
                var objectcont = (context as IObjectContextAdapter).ObjectContext;
                
                  Cart cart = new Cart(){ Goodsid = "商品id", Quantity = 2, User = new User(){Id = 1}};
                  objectcont.AddObject("Cart", cart);
    
                  objectcont.SaveChanges();      
            }
    报错:
    System.Data.Entity.Core.UpdateException : An error occurred while updating the entries. See the inner exception for details. ----> System.InvalidOperationException : A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'UserId'.

     有人说:

    在外键表一端,其Key 不能 是 自增标识字段。比如Office作为从表,其主键OfficeId就不能是自增的,否则EF会在向Office添加记录时报告:Adependent property in a ReferentialConstraint is mapped to a store-generatedcolumn.

    http://www.cnblogs.com/liyanwei/p/280964fef29b58c8e95320fae3cbe4fa.html

    来试一下:

    修改数据user id为自增

    更新一下

       [Test]
            public void EntiyConnect()
            {
                var context = new projectDatabaseEntities();
                var objectcont = (context as IObjectContextAdapter).ObjectContext;
                User user= new User(){Userame = "zhangsan",UserAddress = "beijing  chaoyang"};
              //   Cart cart = new Cart(){ Goodsid = "商品id", Quantity = 2, User = new User(){Id = 1}};
                objectcont.AddObject("User", user);
    
                  objectcont.SaveChanges();      
            }

    这样做成功了(test两遍 第一遍id可能会是0),不要以为别人就说的对了,需要继续解决这个问题,Adependent property in a ReferentialConstraint is mapped to a store-generatedcolumn

    还是stackoverflow 好用:Lhttp://stackoverflow.com/questions/6384659/a-dependent-property-in-a-referentialconstraint-is-mapped-to-a-store-generated-c

    问题出在

    CREATE TABLE [dbo].[Cart] (
        [Id]       INT             NOT NULL,
        [Goodsid]  NVARCHAR (100) NOT NULL,
        [Quantity] INT            NOT NULL,
        [UserId]   INT           IDENTITY (1, 1) NOT NULL,
        PRIMARY KEY CLUSTERED ([Id] ASC)
    );

    改为

    CREATE TABLE [dbo].[Cart] (
        [Id]       INT            IDENTITY (1, 1) NOT NULL,
        [Goodsid]  NVARCHAR (100) NOT NULL,
        [Quantity] INT            NOT NULL,
        [UserId]   INT            NOT NULL,
        PRIMARY KEY CLUSTERED ([Id] ASC)
    );

    是不是和user主键设置了自增有关,没有验证。  已验证  没有关系。

    接下来循环100次插入100条数据到cart。

     [Test]
            public void EntiyConnect()
            {
                var context = new projectDatabaseEntities();
                var objectcont = (context as IObjectContextAdapter).ObjectContext;
              
    
                for (int i = 0; i < 100; i++)
                {
                    Cart cart = new Cart() { Goodsid = "商品id"+i, Quantity = 2, UserId = 1 };
                    objectcont.AddObject("Cart", cart);  
                }
                objectcont.SaveChanges();  
            }
    SaveChanges在for内外的性能怎么看呢?

    删除
     [Test]
            public void DeleteCartByGoodsid()
            {
                var context = new projectDatabaseEntities();    var cartgoodsid = from c in context.Cart where c.Goodsid.Contains("2") select c;
                foreach (var b in cartgoodsid)
                {
                    context.Cart.Remove(b);
                }         
                context.SaveChanges();
            }
     [Test]
            public void DeleteCartByGoodsid()
            {
                var context = new projectDatabaseEntities();
                var objectcont = (context as IObjectContextAdapter).ObjectContext;
                var cartgoodsid = from c in context.Cart where c.Goodsid.Contains("1") select c;
                foreach (var b in cartgoodsid)
                {
                    objectcont.DeleteObject(b);
                }         
                context.SaveChanges();
    
            }
    ObjectContext是不已经过时了?  不用它也完全可以处理 projectDatabaseEntities的对象要比ObjectContext丰富的多


      [Test]
            public void AddToCart2()
            {
                var context = new projectDatabaseEntities();
                Cart cart = new Cart() { Goodsid = "商品id", Quantity = 2, UserId = 1 };
                context.Cart.Add(cart);
                context.SaveChanges();
            }

    5.x  估计可以不用管了 

     [Test]
            public void GetCart()
            {
                var edm = new projectDatabaseEntities();
                var result1 = edm.Cart.Find(1);
    
                Console.WriteLine("edm.Cart.Find:" + result1.Goodsid);
               
    
                var list = (from c in edm.Cart select c ).Take(10);
                foreach (var user in list)
                {
                    Console.WriteLine("(from c in edm.Cart select c ).Take(10):" + user.Goodsid);
                }
    
            }
     

    edm.Cart.Find:sdfsdfsdfsd
    (from c in edm.Cart select c ).Take(10):sdfsdfsdfsd
    (from c in edm.Cart select c ).Take(10):sdfsdfsdfsd
    (from c in edm.Cart select c ).Take(10):dfgdgd
    (from c in edm.Cart select c ).Take(10):商品id
    (from c in edm.Cart select c ).Take(10):商品id
    (from c in edm.Cart select c ).Take(10):商品id
    (from c in edm.Cart select c ).Take(10):商品id
    (from c in edm.Cart select c ).Take(10):商品id
    (from c in edm.Cart select c ).Take(10):商品id0
    (from c in edm.Cart select c ).Take(10):商品id3

    ---怎样find别的字段呢 

    --其实就是lambda表达式

      /// <summary>
            /// lambda 表达式
            /// </summary>
            [Test]
            public void GetCart()
            {
                var edm = new projectDatabaseEntities();
    
                var cart = edm.Cart.Select(p =>p.Goodsid);
                var result1 = cart.Where(p => p.Contains("5"));
                
                foreach (var b in result1)
                {
                    Console.WriteLine("edm.Cart.Find:" + b);  
                }      
            }
  • 相关阅读:
    3.流程控制语句
    pandas数据处理(一)pymongo数据库量大插入时去重速度慢
    windows下载安装redis
    Scrapy(一)爬知乎所有用户信息
    Mongodb去除重复的数据,pymongo去重
    selenium爬虫报错:Message: stale element reference: element is not attached to the page document 促成1分钟爬完斗鱼主播信息。
    用pyspider爬斗鱼主播信息
    曼城新闻情报站(二)Django框架的爬虫
    曼城新闻情报站(一)爬取3大网站的曼城新闻
    Beautiful Soup多线程爬取斗鱼所有主播信息(改良版)
  • 原文地址:https://www.cnblogs.com/viewcozy/p/4697149.html
Copyright © 2011-2022 走看看