EntityFramework无效的列名称

时间:2014-07-08 09:04:52

标签: c# asp.net-mvc entity-framework

更新:将BasketID的两种数据类型与int匹配不能解决问题。

导致错误的代码:

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

引发错误:

System.Data.Entity.dll中出现“System.Data.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; }
}

3 个答案:

答案 0 :(得分:0)

此错误消息告诉您绑定中存在错误,或者数据库表中没有此类列。我可以看到BasketID中的BasketItem是字符串,因此这是一个错误,将其更改为int,看看它是如何发生的。

public class BasketItem

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

答案 1 :(得分:0)

为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数据类型,然后重试!

答案 2 :(得分:0)

能够通过不直接访问db上下文来解决一些小问题

ShoppingBasket myBasket = new ShoppingBasket();
        myBasket.ShoppingBasketId = basketID;

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