C# 如何向数据库first Entity Framework 6元数据添加只读属性
我正在自学MVC和EF6,实际上我正在学习asp.net网站上的教程,这些教程非常有用。今天我跟在后面。这是使用代码优先的方法,但我使用数据库优先的方法。因此,我按照说明将以下只读属性添加到模型中,在我的例子中,添加到模型的元数据中C# 如何向数据库first Entity Framework 6元数据添加只读属性,c#,asp.net,asp.net-mvc,entity-framework-6,C#,Asp.net,Asp.net Mvc,Entity Framework 6,我正在自学MVC和EF6,实际上我正在学习asp.net网站上的教程,这些教程非常有用。今天我跟在后面。这是使用代码优先的方法,但我使用数据库优先的方法。因此,我按照说明将以下只读属性添加到模型中,在我的例子中,添加到模型的元数据中 [Display(Name = "Full Name")] public string FullName { get { return LastName + ", " + FirstMidName; } } 但
[Display(Name = "Full Name")]
public string FullName
{
get
{
return LastName + ", " + FirstMidName;
}
}
但当我尝试访问学生页面时,我出现了以下错误:
System.ComponentModel.DataAnnotations.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理。其他信息:“MVCEF6DBFirst.Models.Student”类型的关联元数据类型包含以下未知属性或字段:FullName。确保这些成员的名称与主类型属性的名称匹配
我知道最近添加的属性有一个错误,所以我在谷歌上搜索了它,但我找不到正确的解决方案
您能告诉我如何将此属性添加到我的模型中吗
提前感谢。如果数据库表中不存在FullName列,这意味着EF model Student类中不存在属性FullName,则会出现此错误
public partial class Student
{
public string FullName
{
get;
set;
}
}
public partial class Student
{
public string FirstName
{
get; set;
}
public string SecondName
{
get; set;
}
[MetadataType(typeof(StudentMetadata))]
public partial class Student
{
}
public class StudentMetadata
{
[Display(Name = "Full Name")]
public string FullName { get; set; }
}
@model Models.Student
@Html.DisplayForModel()
属性的名称将按您想要的方式显示:
如果要通过将字段设置为只读来阻止用户编辑该字段,则可能需要使用此选项
@Html.TextBoxFor(m => m.FullName, new{ disabled = "disabled", @readonly = "readonly" })
我不知道如何使用Html.EditorForModel实现同样的效果
或者,如果您仍然需要由其他两个属性FirstName和LastName组成的属性FullName,我会尝试:
public partial class Student
{
public string FullName
{
get;
set;
}
}
public partial class Student
{
public string FirstName
{
get; set;
}
public string SecondName
{
get; set;
}
}public class StudentChild : Student
{
[Display(Name="User name")]
public String FullName
{
get { return FirstName + ", " + SecondName; }
}
}@model StudentChild
@Html.DisplayForModel()
我不确定后者是否是完美的方法,因为如果基础数据库模式发生更改,则需要修改子类。正如我在@sergik的答案中所评论的那样,我找到了另一种方法来完成这项工作(基于@sergik的答案)
希望对其他人有用。您想要的是为您的模型提供只读属性?如果出现这种情况,则创建一个分部类并添加此属性并放置[System.ComponentModel.DataAnnotations.Schema.NotMapped]attribute@Seminda的答案应该是可以接受的。谢谢@sergik您的方法非常有用。此外,我尝试了另一种可能有用的方法。(以下为答案)
using System.ComponentModel.DataAnnotations;