【问题标题】:Entity Framework avoiding [NotMapped] attribute in release mode实体框架在发布模式下避免 [NotMapped] 属性
【发布时间】:2017-04-26 08:16:25
【问题描述】:

我最近将我的项目从 4.0 升级到 .NET Framework 4.5。在完成MSDN Migration Guide 中提到的所有任务后,我对模型添加了一些更改以支持 Oracle 数据库。

模型如下所示:

namespace KYC_v4.Models
{
    [Serializable]
    public class Organization
    {
       public int OrganizationID { get; set; }

       [Required]
       [Display(Name = "OrganizationName", ResourceType = typeof(Resources.Home))]
       [MaxLength(200)]
       public string OrganizationName { get; set; }

       public virtual List<UserGroup> Groups{get;set;}

       public OrganizationDetails Details { get; set; }

       public int UserID { get; set; }

       [NotMapped]
       [MaxLength(100)]
       public string membersCount { get; set; }

       [NotMapped]
       public List<CheckOrgPermissionViewModel> CheckPermission { get; set; }
    }
}

public class CheckOrgPermissionViewModel {
    public string Permissiontype { get; set; }
    public bool isTrue { get; set; }
}

当我从 Visual Studio 调试时它运行正常,但是当我尝试将它托管在 IIS 服务器中时,我收到此错误:

到目前为止我所尝试的:

  1. 从其他关于类似问题的答案中,我尝试删除上述文件中的引用 System.ComponentModel.DataAnnotations; - 无效

  2. 尝试从路径复制.dll文件

    C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll**
    

    到应用程序的bin目录

  3. 更新了已安装的 NuGet 包using Update-Package -reinstall -Project "Kyc v4"

以上都不适合我,如果您想知道 - 我的DbContext 中的错误中提到的模型没有DbSet,所以我的猜测是[NotMapped] 属性被忽略出于某种原因,由实体框架 (6.1.3)。我的System.ComponentModel.DataAnnotations 参考中的版本是4.0.0.0,运行时间是v4.0.30319

感谢任何帮助。谢谢

【问题讨论】:

  • 使用视图模型(并且您的视图模型应该在一个单独的文件夹中 - 比如ViewModels,因此它们与 EF 无关)
  • 如果我这样做,我可以将它与使用 [NotMapped] 的常规模态一起使用而没有任何问题吗?另外,如果是这种情况,为什么在 iisexpress 中调试时我能够毫无问题地运行项目
  • 停止在您的视图中使用[NotMapped] 和数据模型并使用视图模型。并且视图模型不包含属于数据模型的属性。
  • 不推荐使用 [NotMapped]。如果是,为什么它在我使用它的其他地方没有给我带来问题?
  • 据我所知没有。

标签: c# .net asp.net-mvc entity-framework visual-studio-2017


【解决方案1】:

你有没有尝试将注解[Key]放在OrganizationID上?

Serializable] public class Organization  { 
   [Key]
     public int OrganizationID { get; set; }  }

【讨论】:

    【解决方案2】:

    我遇到了这个问题,花了一段时间才弄清楚问题所在。基本上,我有 3 个项目:

    1. DbContext 项目 - 用于数据迁移和实体框架代码
    2. 模型项目 - 这些包含 DbContext 项目引用的模型(并包含 [NotMapped] 标记。这是 .NET 2.0 标准项目,因为它与 Xamarin iOS 和 Android 应用程序项目共享模型。
    3. ASP.NET MVC 项目 - 它包含 WebUI 并引用了上述两个项目。

    问题是我将 Nuget 包用于:

    System.ComponentModel.DataAnnotations

    适用于 ModelsWeb 项目,但不适用于 DbContext 项目。

    我在 .NET Standard 项目中需要这个,因为我无法引用普通的 .NET 库(可能不是最好的项目组织,但它是我所拥有的)

    解决方案是在所有项目中引用 'System.ComponentModel.DataAnnotations' 的 nuget 版本。

    当我这样做并运行 Update-Database 时,它​​运行良好。

    【讨论】:

      【解决方案3】:

      最后,我发现问题出在Visual studio IDE 本身。由于某种原因,在执行“清理”/“构建”或“重建”时它没有清理旧的引用,因此引用发生冲突并导致与 System.ComponentModel.DataAnnotations.Schema 混淆。所以我手动删除了旧文件并发布到一个新的空目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        相关资源
        最近更新 更多