Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 类型X与导入的类型X冲突_C#_Entity Framework_Data Annotations_Partial Classes - Fatal编程技术网

C# 类型X与导入的类型X冲突

C# 类型X与导入的类型X冲突,c#,entity-framework,data-annotations,partial-classes,C#,Entity Framework,Data Annotations,Partial Classes,在实体框架(数据库优先)中,我试图向创建的类添加一些数据注释 一般来说:我创建了X类: namespace Info { using System; using System.Collections.Generic; public partial class X { public string SomeProperty {get; set;} ... } } 我想在序列化为JSON时忽略属性SomeProperty,因此

在实体框架(数据库优先)中,我试图向创建的类添加一些数据注释

一般来说:我创建了X类:

namespace Info
{
    using System;
    using System.Collections.Generic;

    public partial class X
    {
        public string SomeProperty {get; set;}
        ...
    }
}
我想在序列化为JSON时忽略属性
SomeProperty
,因此在
App\u code/Metadata
中,我创建了类X.cs,并添加了一些元数据:

namespace Info
{

    public class XMetaData
    {
        [JsonIgnore]
        public string SomeProperty{get; set;}
    }

     [MetadataType(typeof(XMetaData))]
     public partial class X
     {

     }

}
在上面,我已经手动将命名空间从
Info.App\u code.Metadata
更改为
Info
,以匹配部分类

然而,在我使用X类的所有地方,我都有警告

“…/Info/App_code/Metadata/X.cs”中的类型Info.X与“…/Info/X.cs”中导入的类型Info.X冲突。使用“…/Info/App_Code/Metadata/X.cs”中定义的类型

我希望两个部分类都会合并,但是所有出现的都是指那个空的一个X类


有人知道我遗漏了什么吗?

根据您正在开发的应用程序的类型,将代码放入App_code文件夹可能是错误的,因为它会对内容产生一定的影响。看


尝试将源文件移出App_代码,并确保其“生成操作”在“属性”窗口中“已编译”。

引用同一类的多个分部类定义必须全部存在于单个程序集中。在上面的例子中,在编译期间,元数据应该烘焙到类中,编译之后,类是完整的,由所有部分组成。分部类是将同一类的定义拆分为多个文件的一种方法

有关详细说明,请参见,但请注意以下几点:

必须在同一程序集和同一模块(.exe或.dll文件)中定义所有表示为相同类型零件的部分类型定义。部分定义不能跨越多个模块

这里的链接解释了这一点

通常,ASP.NET会为每个应用程序目录(如App_代码)创建一个程序集,并为主目录创建一个程序集


对于您的情况,尽管分部类位于同一项目和同一命名空间中,但它们没有被编译到同一程序集中。

删除项目bin文件夹,清理并重建项目

我也遇到了同样的问题。可以用两种方法解决这个问题。 1.重命名应用程序代码文件夹 2.将.cs文件移到项目的根目录中


这两种方法都有效。

在我的例子中,我通过在APP_Code文件夹中创建一个子文件夹解决了这个问题。将源代码移到那里。添加了一个深入的名称空间。清理并构建,现在一切正常。

尝试检查.aspx页面是否与类(.cs)文件同名

示例:如果文件为Guy.aspx,类文件为Guy.cs,则这些文件将发生冲突


检查.aspx文件的第一行,如果它继承了=“Guy”,则存在冲突。不要忘记更改Guy.aspx.cs文件。如果已经创建了该文件,则需要更改公共分部类。

但这两个类都在一个项目中,只是在不同的文件夹中。