Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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/0/asp.net-mvc/14.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/vb.net/15.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# 升级到EF 6.1.1会使[NotMapped]的效果消失_C#_Asp.net Mvc_Entity Framework 4_Entity Framework 6 - Fatal编程技术网

C# 升级到EF 6.1.1会使[NotMapped]的效果消失

C# 升级到EF 6.1.1会使[NotMapped]的效果消失,c#,asp.net-mvc,entity-framework-4,entity-framework-6,C#,Asp.net Mvc,Entity Framework 4,Entity Framework 6,我已经从EF 4.3.1升级到6.1.1,现在看来注释[NotMapped]是无用的。是的,我已经更改为正确的汇编,编译时一切看起来都很好 在[NotMapped]存在的任何地方,该属性都作为域属性处理,我得到一个错误,EF在数据库中找不到匹配的列 例如: private bool _authenticated = true; [NotMapped] public bool Authenticated { get { re

我已经从EF 4.3.1升级到6.1.1,现在看来注释[NotMapped]是无用的。是的,我已经更改为正确的汇编,编译时一切看起来都很好

在[NotMapped]存在的任何地方,该属性都作为域属性处理,我得到一个错误,EF在数据库中找不到匹配的列

例如:

private bool _authenticated = true;

        [NotMapped]
        public bool Authenticated
        {
            get { return _authenticated; }
            set { _authenticated = value; }
        }
是的,看来我可以通过添加

 modelBuilder.Entity<User>().Ignore(x => x.Authenticated);
modelBuilder.Entity().Ignore(x=>x.Authenticated);
…那么,[NotMapped]在EF6中有什么用途呢


(升级前工作正常)

解决方法是先卸载,然后在解决方案中的所有项目上重新安装EF

我认为当我第一次升级到EF6时,某些项目的.NET版本不匹配,导致系统从错误的程序集(.NET而不是EF)获取[NotMapped]注释

这让我想到:

…最重要的是:“如果你使用新的 来自.NET 4.5中System.ComponentModel.DataAnnotations.dll程序集的批注
它们不会首先由代码处理。”

我还认为与.NET版本和EF6不匹配,这使得程序从错误的程序集中获取[NotMapped]注释

特别是,问题在于这两个引用的使用:System.ComponentModel.DataAnnotations; System.ComponentModel.DataAnnotations.Schema

我注意到,在这种情况下,我们不能在同一个类文件上同时使用这两个引用,因为NotMapped属性将被分配给预期类文件的不同dll。即使您在代码中指定了一个引用,而没有使用放置指令(例如,将完整引用放置在属性声明上),程序仍将存在此错误

为了解决这个问题,我从类中删除了引用System.ComponentModel.DataAnnotations,只留下System.ComponentModel.DataAnnotations.Schema引用来使用NotMapped属性。为了弥补第一次引用(表单验证操作)的不足,我在客户端实现了验证(使用jquery+javascript)


派对迟到了,但我有个案子:

using System.ComponentModel.DataAnnotations;//I needed this for [Key] attribute on another property
using System.ComponentModel.DataAnnotations.Schema;//this one is for [NotMapped]
...
[ScriptIgnore]
[NotMapped]
public System.Timers.Timer Timer { get; set; }
这将产生令人愤怒的东西,比如:

AddColumn("dbo.mytable", "Timer_AutoReset", c => c.Boolean(nullable: false));
AddColumn("dbo.mytable", "Timer_Enabled", c => c.Boolean(nullable: false));
AddColumn("dbo.mytable", "Timer_Interval", c => c.Double(nullable: false));

通过试验,我得出结论,如果列上有另一个属性,则忽略
[NotMapped]
。如果可能的话-在我的例子中是这样-将其删除,并且不会忽略
[NotMapped]

我遇到的问题是一个过时的.EDMX文件(创建该文件是为了加快应用程序启动时间)。它是在添加[NotMapped]属性之前生成的,因此该属性包含“NotMapped”属性


添加NotMapped属性后重新生成.EDMX文件修复了此问题。

遇到异常的地方是否有代码?无论我在哪里执行get、update或put to database操作,以及我包含的[NotMapped]属性都会出现错误:无效列名“Authenticated”。(或调用列/属性的任何内容)。在本例中,用户对象的代码是一个简单的存储库调用:public virtual T FirstOrDefault(Expression where){return\u objectSet.FirstOrDefault(where);}我在EF 6.1.3项目中看到了这个问题。我的WebAPI的“Put”方法在我标记为NotMapping的属性上给了我一个ModelState错误。有趣的是,我只看到3个NotMap属性中的一个出现了错误。在我的例子中,该属性的类型为
NameValueCollection
,我甚至不能使用
OnModelCreating
fluent api声明它未映射-intellisense告诉我它必须是不可为空的类型。我遇到了同样的问题。看起来这是个bug。
AddColumn("dbo.mytable", "Timer_AutoReset", c => c.Boolean(nullable: false));
AddColumn("dbo.mytable", "Timer_Enabled", c => c.Boolean(nullable: false));
AddColumn("dbo.mytable", "Timer_Interval", c => c.Double(nullable: false));