EntityFramework无效的列名

本文关键字:无效 EntityFramework | 更新日期: 2023-09-27 18:11:50

UPDATE:将BasketID的两个数据类型都匹配为int并不能解决问题。

导致错误的代码:

 BasketItem duplicateBasketItem = (from thisitem in storeDB.BasketItems
                                   where thisitem.sellerSKU == newItem.sellerSKU
                                   select thisitem).SingleOrDefault();

正在抛出的错误:

类型为'System.Data '的异常。在System.Data.Entity.dll中发生EntityCommandExecutionException,但未在用户代码中处理

{"无效的列名'BasketID'。"}

我的模型:

public class Basket
{
    [Key]
    public int  BasketID { get; set; }
    public List<BasketItem> BasketItems { get; set; }
    public int Count { get; set; }
    public System.DateTime DateCreated { get; set; }
    public Guid UserID { get; set; }
}

public class BasketItem
{
    public int BasketItemID { get; set; }
    public virtual string BasketID { get; set; }
    public int sellerID { get; set; }
    public string sellerSKU { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}
public class StoreEntities : DbContext
{
    public DbSet<Order> Order { get; set; }
    public DbSet<OrderItems> OrderItems {get; set;}
    public DbSet<Basket> Basket { get; set; }
    public DbSet<BasketItem> BasketItems { get; set; }
}

EntityFramework无效的列名

这个错误消息告诉您绑定中有错误,或者数据库表中没有这样的列。我可以看到BasketItem中的BasketID是字符串,所以这里有一个错误,把它改成int,看看结果如何。

public class BasketItem
{
    public int BasketItemID { get; set; }
    public virtual int BasketID { get; set; }

为BasketId写入int数据类型而不是字符串,如下所示:-

public class BasketItem
{
    public int BasketItemID { get; set; }
    public virtual int BasketID { get; set; }
    public int sellerID { get; set; }
    public string sellerSKU { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}

BasketId在Basket表中是int,但是你已经在你的BasketItem表中指定了字符串,所以它没有找到它们之间的任何关系。尝试添加int数据类型,然后再试一次!

可以通过不直接访问db上下文来解决这个问题

ShoppingBasket myBasket = new ShoppingBasket();
        myBasket.ShoppingBasketId = basketID;
        Basket storebasket = (from ph in storeDB.Basket
                                      where ph.BasketID == myBasket.ShoppingBasketId
                                      select ph).SingleOrDefault();