实体框架6.2不尊重某些计算机上的TableAttribute

时间:2018-04-12 11:37:11

标签: c# .net entity-framework entity-framework-6

我有一个.NET 4.5 WPF应用程序,可以通过Entity Framework 6.2直接访问MS SQL数据库。该应用程序在我们客户的大多数计算机上运行得非常好,但是有一个系统我们的应用程序无法访问数据库,因为EF在内部创建了引用不存在的表的SQL语句:

  

System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常--->   System.Data.SqlClient.SqlException:无效的对象名称'dbo.Configurations'。

我们的配置实体如下所示:

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

namespace SomeNamespace
{
    [Table("Configuration")]
    public class Configuration : EntityBase
    {
        [Required]
        [MaxLength(50)]
        public string Name { get; set; }

        public string Value { get; set; }

        [Required]
        public string Username { get; set; }
    }
}

我们的DbContext类看起来像这样(摘录):

public class SomeContext : DbContext
{
    public virtual DbSet<Configuration> Configurations { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<SomeContext>(null);
        base.OnModelCreating(modelBuilder);
    }
}

为什么某些系统上的EF会忽略TableAttribute对我来说,显然EF在这种情况下不尊重TableAttribute,因为它想要访问dbo.Configurations表(使用DbContext的Configurations属性派生)而不是dbo.Configuration使用属性中的名称。 有趣的是,这只发生在一台计算机上 - 在所有其他计算机上,应用程序运行良好。

我怀疑在GAC中安装了旧版本的EF而不是我在我们的应用程序中部署的EF DLL - 因此我在项目参考中将特定版本设置为true(实体框架未通过NuGet添加到项目中。这并没有解决问题。

我认为快速解决方案是不使用属性,而是使用流畅的API。但是,有人知道为什么会出现这个问题吗?

提前感谢您的帮助!

0 个答案:

没有答案