【EF】疑难杂症

时间:2023-03-09 06:37:36
【EF】疑难杂症

用户和购物车数据  主从表

添加 ADO.NET实体数据类型

【EF】疑难杂症

  [Test]
public void EntiyConnect()
{
var context = new projectDatabaseEntities();
var objectcont = (context as IObjectContextAdapter).ObjectContext; Cart cart = new Cart(){ Goodsid = "商品id", Quantity = , User = new User(){Id = }};
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为自增

更新一下

【EF】疑难杂症

   [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

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

【EF】疑难杂症

问题出在

CREATE TABLE [dbo].[Cart] (
[Id] INT NOT NULL,
[Goodsid] NVARCHAR (100) NOT NULL,
[Quantity] INT NOT NULL,
[UserId] INT IDENTITY (, ) 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 = ; i < ; i++)
{
Cart cart = new Cart() { Goodsid = "商品id"+i, Quantity = , UserId = };
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("") 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("") 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 = , UserId = };
context.Cart.Add(cart);
context.SaveChanges();
}

5.x  估计可以不用管了

【EF】疑难杂症

 [Test]
public void GetCart()
{
var edm = new projectDatabaseEntities();
var result1 = edm.Cart.Find(); Console.WriteLine("edm.Cart.Find:" + result1.Goodsid); var list = (from c in edm.Cart select c ).Take();
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("")); foreach (var b in result1)
{
Console.WriteLine("edm.Cart.Find:" + b);
}
}