我试图通过使用实体框架(代码优先)对数据库进行更改。在尝试保存更改之前,所有操作都很正常,当抛出错误时:
无效列名BasketID
但是,在调试期间,查看storeDB.BasketItems,实际上添加了basketitem。
我错过了什么?
代码:
// Basket is ENTIRELY Empty, add new item and move on.
if (storebasket == null || storebasket.BasketItems.Count == 0)
{
// Add item as is
BasketItem newItem = new BasketItem
{
sellerSKU = basketItem.sellerSKU,
BasketID = basketID,
sellerID = 1,
Quantity = basketItem.Quantity,
Price = basketItem.Price
};
storeDB.BasketItems.Add(newItem);
storeDB.SaveChanges();
}数据库实体:
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; }
}课程:
public class Basket
{
[Key]
public string BasketID { get; set; }
public virtual IList<BasketItem> BasketItems { get; set; }
public System.DateTime DateCreated { get; set; }
public Guid UserID { get; set; }
}
public class BasketItem
{
[Key]
public int BasketItemID { get; set; }
public virtual string BasketID { get; set; }
[Required]
public int sellerID { get; set; }
[Required]
public string sellerSKU { get; set; }
[Required]
public int Quantity { get; set; }
[Required]
public decimal Price { get; set; }
}选项粘贴编辑作为答案:
我不知道为什么这会解决这个问题,但是这个程序现在可以正常工作了。
public StoreEntities(): base("storeDBConnectionString")
{
Database.SetInitializer<StoreEntities>(
new DropCreateDatabaseAlways<StoreEntities>());发布于 2014-07-22 21:19:21
如果您查看您的BasketItem类,您将您的BasketID设置为虚拟的.这将导致实体框架不将属性绑定到列。正确的做法是:
public class BasketItem
{
[Key]
public int BasketItemID { get; set; }
public virtual Basket Basket { get; set; }
public string BasketID { get; set; }
[Required]
public int sellerID { get; set; }
[Required]
public string sellerSKU { get; set; }
[Required]
public int Quantity { get; set; }
[Required]
public decimal Price { get; set; }
}https://stackoverflow.com/questions/24642144
复制相似问题