【发布时间】:2014-01-03 05:37:59
【问题描述】:
我重构了一个使用 EF5 Database First 的应用程序。应用程序使用元数据类将数据注释添加到实体属性。在重构之前,这些都有效。它们大多只是显示名称和数据格式。
例子:
[MetadataType(typeof(QueryDetailsResultMetadata))]
public partial class QueryDetailsResult : IPortfolio
{
public string Source { get { return "Local"; } }
}
public class QueryDetailsResultMetadata
{
//Fields from QueryDetailsResult requiring annotations
[Display(Name = "Company Name")]
public string SiteName { get; set; }
[Display(Name = "Contact Telephone Number")]
public string ContactTelNo { get; set; }
}
在重构之前,分部类没有从接口继承,也没有非映射属性。然而,这些更改是必需的。这两者都不应该引起问题,因为两者都被记录为有效的解决方案。
界面是这样的
public interface IPortfolio
{
int Id { get; set; }
string SiteName { get; set; }
string YearOfManufacture { get; set; }
string Contact { get; set; }
string ContactTelNo { get; set; }
string Source { get;}
}
显示使用这样的属性
@Html.DisplayNameFor(model => model.Portfolio.ContactTelNo)
在运行时的视图上,显示的是属性名称而不是显示名称。任何想法为什么?我看不出注释被破坏的任何原因
//编辑
我尝试将注释移动到部分中的新非映射字段,并将它们从元数据类中删除。看看有没有效果。没有任何。还要仔细检查 edmx 与它所在的部分类和元数据文件在同一个命名空间中。
对检查或尝试什么有什么想法?这方面没有太大的成功,大多数谷歌结果只是说使用已经到位的元数据类。
//第二次编辑
将注释从元数据类移到接口上就可以了。
【问题讨论】:
-
问题出在你的新
IPortfolio界面...stackoverflow.com/questions/2652811/… -
我的印象是annotations on an interface 不起作用。我会试一试!谢谢
-
@nemesv 您能否将其重新添加为答案,以便我接受并为您分配积分。工作了一个款待。现在元数据类中甚至不需要注释。我想微软团队改变了主意,因为他们似乎反对在我上面发布的链接中实施它。非常感谢!
标签: c# asp.net-mvc-4 entity-framework-5