0

我已经开始使用 ASP.NET MVC 并使用实体框架,特别是使用 SQLite db,但我有一个小问题:

我有一个一对多的关系,但 EF 生成错误的查询,

SQLite error
no such column: Extent1.Category_CategoryID

所以,他使用 ModelName 作为前缀,这是错误的。有什么约定,我可以删除吗?还是出发?

谢谢,对不起我的英语不好

// 更新,添加类别实体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;


namespace Eshop.Domain.Entities
{
    [Table("Categories")]
    public class Category
    {
        public Int64 CategoryID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Product> Products { get; set; }
    }
}

// 添加产品实体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace Eshop.Domain.Entities
{
    [Table("Products")]
    public class Product
    {
        public Int64 ProductID { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public int CategoryID { get; set; }


    }
}
4

1 回答 1

1

如果您使用的是 Code-First(我假设),您需要...

  • 要么引入导航属性Product

    [Table("Products")]
    public class Product
    {
        public Int64 ProductID { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public int CategoryID { get; set; }
    
        public virtual Category Category { get; set; }
    }
    

    然后EF将识别CategoryID为外键。

  • CategoryID或使用 Fluent API配置为外键:

    modelBuilder.Entity<Category>()
        .HasMany(c => c.Products)
        .WithRequired()
        .HasForeignKey(p => p.CategoryID);
    
于 2012-06-19T16:22:28.933 回答