Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework EF代码首先使用错误的列创建查询_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework EF代码首先使用错误的列创建查询

Entity framework EF代码首先使用错误的列创建查询,entity-framework,ef-code-first,Entity Framework,Ef Code First,我正在使用EF6.0,并首先使用代码创建数据库视图。我有一个小样品,效果很好。我正在尝试迁移到另一组视图。出于某种原因,我在查询中得到了一个列的错误列名。这似乎是从我加入的另一个观点引入的专栏 我试图更改表上的[Key]列,但似乎没有改变 视图vABC由以下列组成:name varchar(30)和desc varchar(100) 视图vXYZ由以下列组成:name varchar(30)和amount float 他们将在名字上联合起来 这是我正在运行的查询的一个片段:

我正在使用EF6.0,并首先使用代码创建数据库视图。我有一个小样品,效果很好。我正在尝试迁移到另一组视图。出于某种原因,我在查询中得到了一个列的错误列名。这似乎是从我加入的另一个观点引入的专栏

我试图更改表上的[Key]列,但似乎没有改变

视图vABC由以下列组成:name varchar(30)和desc varchar(100) 视图vXYZ由以下列组成:name varchar(30)和amount float

他们将在名字上联合起来

这是我正在运行的查询的一个片段:

             var name = dataRecord.Cells[0].Value.ToString();
             var query = from b in _context.XYZ
                        .Where(b => b.name == name)
                        select b;
这是返回:

SELECT 
    1 AS [C1], 
    [Extent1].[name] AS [name], 
    [Extent1].[amount] AS [amount],  
    [Extent1].[ABC_name] AS [ABC_name]
    FROM [dbo].[vXYZ] AS [Extent1]
    WHERE [Extent1].[name] = @p__linq__0
我将在下面附上类和dbcontext

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Mynamespace
{

    [Table("vABC")]
    public class ABC
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public ABC()
        {
            XYZs= new HashSet<XYZ>();
        }

        [Key]
        [StringLength(150)]
        public string name { get; set; }

        [StringLength(150)]
        public string Desc { get; set; }


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<XYZ> XYZs{ get; set; }
    }
}


using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;


namespace Mynamespace
{

    [Table("vXYZ")]
    public class Price
    {
        [Key]
        [Required]
        [StringLength(200)]
        public string name{ get; set; }

        public decimal? amount{ get; set; }

        public virtual ABC ABC{ get; set; }
    }
}

namespace Mynamespace
{
    using System.Data.Entity;

    public partial class myContext : DbContext
    {
        public myContext () : base("name=myContext ")
        {
            Database.SetInitializer<myContext >(null);
        }

        public virtual DbSet<ABC> ABCs { get; set; }
        public virtual DbSet<XYZ> XYZs { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<XYZ>()
                .Property(e => e.amount)
                .HasPrecision(19, 4);
        }
    }
}


我的理解是,如果列名在键列名中没有id,那么必须将[key]作为修饰符放在列名之上。我正在这样做。也许我需要在vXYZ上加上[ForeignKey(“name”)]。这就是问题所在吗?无论如何(流畅或属性),您必须告诉EF视图是如何关联的,因为关系不遵循命名约定。请注意,
vXYZ
必须有一个主键,我想不能是
name
。是的。命名约定是一个问题。我修改了它,现在可以工作了。
SELECT [Extent1].[name] AS [name], 
    [Extent1].[amount] AS [amount]
    FROM [dbo].[vXYZ] AS [Extent1]
    WHERE [Extent1].[name] = @p__linq__0