【问题标题】:Entity framework relationships - sql errors实体框架关系——sql错误
【发布时间】:2015-07-06 21:01:20
【问题描述】:

我有一个项目,我正在尝试实现一个(看似)简单的购物车。以下是相关实体。我经常遇到各种错误,这与 order_Id 列名无效有关。所以我怀疑订单和项目之间的关系有问题,但我也认为在方法方面我可能遗漏了一些更大的东西。任何意见,将不胜感激。

public class Item
{
    public int Id { get; set; }
    public byte[] Thumbnail { get; set; }
    public decimal Price { get; set; }
    public string Name { get; set; }
    public bool OnSale { get; set; }
    public string Description { get; set; }
}
public class Order
{
    public int Id { get; set; }
    [ForeignKey("User")]
    public virtual int UserId { get; set; }
    public string Country { get; set; }
    public decimal Total { get; set; }
    public System.DateTime OrderDate { get; set; }
    public virtual IList<Item> Items { get; set; }
    public virtual User User { get; set; }
}
public class MyCart
{
    [Key]
    [ForeignKey("User")]
    public int UserId { get; set; }
    public virtual User User { get; set; }
    public string MyCartId { get; set; }
    public IDictionary<Item, int> ItemsHash { get; set; }      
}

public class User
{
    public int Id{ get; set; }
    public int CreditCard { get; set; }
    public string Country { get; set; }
    public int CCExpMonth { get; set; }
    public int CCExpYear { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual IList<Order> Orders { get; set; }
    public virtual MyCart Cart { get; set; }
}

【问题讨论】:

    标签: .net entity-framework model-view-controller ef-code-first


    【解决方案1】:

    我更正您的实体如下:

    public class Item
    {
        public int Id { get; set; }
    
        public virtual int OrderId { get; set; }
    
        [ForeignKey("OrderId")]
        [InverseProperty("Items")]
        public virtual Order Order { get; set; }
    }
    
    public class Order
    {
        public int Id { get; set; }
    
        public virtual int UserId { get; set; }
    
        [ForeignKey("UserId")]
        [InverseProperty("Orders")]
        public virtual User User { get; set; }
    
        [InverseProperty("Order")]
        public virtual ICollection<Item> Items { get; set; }        
    }
    
    public class MyCart
    {
        [Key, ForeignKey("User")]
        public int UserId { get; set; }
        public virtual User User { get; set; }
    }
    
    public class User
    {
        public int Id { get; set; }
        public int CreditCard { get; set; }
        public string Country { get; set; }
        public int CCExpMonth { get; set; }
        public int CCExpYear { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    
        [InverseProperty("User")]
        public virtual ICollection<Order> Orders { get; set; }
    
        public virtual MyCart Cart { get; set; }
    }
    
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyCart>()
            .HasKey(e => e.UserId);
    
        modelBuilder.Entity<User>()
                    .HasOptional(s => s.Cart) // Mark MyCart is optional for User
                    .WithRequired(ad => ad.User); // Create inverse relationship
    
    }
    

    更新:

    public class Item
    {
        public int Id { get; set; }
    
        public virtual int OrderId { get; set; }
    
        [ForeignKey("OrderId")]
        **[InverseProperty("Items")]**
        public virtual Order Order { get; set; }
    }
    

    【讨论】:

    • 我对单个 OrderId 的列如何在 Item 实体中使用感到困惑,因为一个项目必须属于许多订单。同样,当订单实体没有名为“订单”的属性时,订单上怎么会有逆属性。除了我缺乏理解更新数据库命令失败,因为项目实体中属性“订单”的逆属性属性无效,而且属性“订单”不是订单实体上的有效导航属性。
    • 仍然没有喜悦。包管理器错误读取:参数 objname 不明确或声明的 objtype (COLUMN) 错误。
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多