在实体框架(数据库优先)中,我试图向创建的类添加一些数据注释。
一般情况下:我创建了X类:
namespace Info
{
using System;
using System.Collections.Generic;
public partial class X
{
public string SomeProperty {get; set;}
...
}
}
我希望在序列化为JSON时忽略属性SomeProperty
,因此在App_Code/Metadata
我创建了类X.cs并添加了一些MetaData:
namespace Info
{
public class XMetaData
{
[JsonIgnore]
public string SomeProperty{get; set;}
}
[MetadataType(typeof(XMetaData))]
public partial class X
{
}
}
上面我手动将名称空间从Info.App_Code.Metadata
更改为Info
以使部分类匹配。
然而,在我使用X类的所有地方,我都有警告
The type Info.X in '.../Info/App_Code/Metadata/X.cs ' conflicts with the imported type Info.X in '.../Info/X.cs'. Using the type defined in '.../Info/App_Code/Metadata/X.cs '
我预计两个部分类都会被合并,但所有出现都是指那个空的X类。
有人知道我错过了什么吗?
答案 0 :(得分:7)
根据您正在开发的应用程序类型,将代码放在App_Code文件夹中可能是错误的,因为它对内容有一定的影响。请参阅this other question。
尝试将源文件移出App_Code,并确保它们的“构建操作”在属性窗口中为“已编译”。
答案 1 :(得分:5)
引用同一个类的多个部分类定义必须都存在于单个程序集中。在上面的示例中,在编译期间,元数据应该被烘焙到类中,并且在编译之后,类是完整的,包括所有部分。部分类是将同一类的定义拆分为多个文件的一种方法。
有关详尽的解释,请参阅here,但请注意以下事项:
这里的必须在同一个程序集和相同的模块(.exe或.dll文件)中定义所有属于同一类型的部分类型定义。部分定义不能跨越多个模块。
This链接解释了
通常,ASP.NET为每个应用程序目录(例如App_Code)创建一个程序集,为主目录创建一个程序集。
对于您的情况,虽然部分类在同一个项目和中是相同的命名空间,但它们并没有被编译到同一个程序集中。
答案 2 :(得分:0)
删除项目bin文件夹,清理并重建项目
答案 3 :(得分:0)
我有同样的问题。能够用2种方法解决这个问题。 1.重命名App_Code文件夹 2.将.cs文件移动到项目的根目录中。
两种方法都有效。
答案 4 :(得分:0)
在我的情况下,我通过在APP_Code文件夹中创建子文件夹来解决这个问题。在那里移动了源代码。深入添加了命名空间。清洁和构建,现在一切正常。
答案 5 :(得分:0)
尝试检查您的.aspx页是否与class(.cs)文件相同。
示例:如果文件是Guy.aspx,而类文件是Guy.cs,则它们将冲突。
检查.aspx文件的第一行,如果它是Inherits =“ Guy”,则存在冲突。如果已经创建了Guy.aspx.cs文件,也不要忘记对其进行更改,您将需要更改公共部分类。