Я использую EF 6.0 и сначала создаю свои представления базы данных, используя код.У меня есть небольшой образец, который отлично работает.Я пытаюсь перейти на другой набор взглядов.По какой-то причине я получаю неправильное имя столбца в запросе для одного из столбцов.Похоже, что это привнесено в колонку с другой точки зрения, к которой я присоединяюсь.
Я пытался изменить столбцы [Key] в таблицах, но, похоже, он не меняется.
Представление vABC состоит из столбцов: name varchar (30) и descvarchar (100) Представление vXYZ состоит из столбцов: имя varchar (30) и число с плавающей точкой
Они будут объединяться друг с другом по имени.
Это фрагмент запроса, который я выполняю:
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);
}
}
}
Я ожидаю, что запрос будет
SELECT [Extent1].[name] AS [name],
[Extent1].[amount] AS [amount]
FROM [dbo].[vXYZ] AS [Extent1]
WHERE [Extent1].[name] = @p__linq__0