Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET实体框架使用Table.ModelName\u列约定生成查询_C#_Asp.net_Asp.net Mvc 3_Entity Framework_Sqlite - Fatal编程技术网

C# .NET实体框架使用Table.ModelName\u列约定生成查询

C# .NET实体框架使用Table.ModelName\u列约定生成查询,c#,asp.net,asp.net-mvc-3,entity-framework,sqlite,C#,Asp.net,Asp.net Mvc 3,Entity Framework,Sqlite,我已经开始使用ASP.NET MVC和实体框架,具体地说是SQLite db, 但我有一个小问题: 我有一对多关系,但EF生成了错误的查询 SQLite error no such column: Extent1.Category_CategoryID 因此,他使用ModelName作为前缀,这是错误的。 有什么我可以取消的惯例吗?还是出发 谢谢,很抱歉我的英语不好 //更新,添加类别实体 using System; using System.Collections.Generic; usin

我已经开始使用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; }
    }
}

如果您首先使用代码(我假设是这样),您需要

  • 产品中引入导航属性

    [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
    识别为外键

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

    modelBuilder.Entity<Category>()
        .HasMany(c => c.Products)
        .WithRequired()
        .HasForeignKey(p => p.CategoryID);
    
    modelBuilder.Entity()
    .HasMany(c=>c.Products)
    .WithRequired()
    .HasForeignKey(p=>p.CategoryID);
    

您可以显示实体类吗?您正在运行的LINQ查询是什么?
Extent1
Categories
表吗?不知何故,
Category\u CategoryID
看起来更像是来自另一个表的外键……查询是由EF自动生成的,Extent1应该是Categories。CategoryID包含实体、产品和类别,在Category的情况下,它是主键,并且仅在Product的单个列中。因此,这是一对多关系,Categories.CategoryID=>Products.CategoryID。您是否也可以显示
Product
类?我遇到了这个错误。请你用正确的方式给我发邮件(我的意思是在两个类中都有反向引用)请@ramsesoou,我忘记了反向引用属性(mean Category)。EF也有问题,他无法识别外键(使用SQLite,可能是错误的表结构)。公共Int64类别ID{get;set;}//EF需要少量修复。谢谢你的帮助。
modelBuilder.Entity<Category>()
    .HasMany(c => c.Products)
    .WithRequired()
    .HasForeignKey(p => p.CategoryID);