如何将只读属性添加到数据库第一个实体框架6元数据
我正在学习自己的MVC和EF6,实际上我是在asp.net网站上的教程是非常有帮助的。今天我正在关注this tutorial。这是与代码优先的方法,但我用数据库第一的方法做到这一点。所以我按照说明将以下只读属性添加到模型中,在我的情况下添加到模型的元数据中。如何将只读属性添加到数据库第一个实体框架6元数据
[Display(Name = "Full Name")]
public string FullName
{
get
{
return LastName + ", " + FirstMidName;
}
}
,但是当我试图访问学生页面我得到这个错误:
“System.InvalidOperationException”类型的异常出现在System.ComponentModel.DataAnnotations.dll但在用户代码中没有处理。其他信息:类型'MVCEF6DBFirst.Models.Student'的关联元数据类型包含以下未知属性或字段:FullName。确保这些成员的名称与主类型的属性名称相匹配。
我知道最近添加的属性有错误,所以我使用了它,但我找不到正确的解决方案。
你能告诉我怎么样,我应该提前将此属性添加到我的模型
感谢。
如果FullName列在数据库表中不存在,这意味着EF模型Student类中不存在属性FullName,则会出现此错误。
-
我怀疑你可以使用元数据方法实现你想要的。但是你可以修改你的属性在视图中的渲染方式。如果下面是你的EF模型类:
public partial class Student { public string FullName { 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()
属性的名称将显示你想要的方式你的EF模型Student类:
如果您想阻止用户通过只读来编辑该字段,您可能需要使用此
@Html.TextBoxFor(m => m.FullName, new{ disabled = "disabled", @readonly = "readonly" })
我不知道如何实现与Html相同的效果。EditorForModel
或者如果你还想属性全名由其他两个属性名字和姓氏的我想尝试:
-
你的EF模型类:
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你的方法非常有用。另外,我尝试了另一种可能有用的方法。 (以下面的答案发布) – DigitalDNA 2014-09-05 16:06:59
正如我在@ sergik的回答中所评论的,我发现了另一种方法来获得这项工作(基于@ sergik的回答)。
- EF模型类
public class StudentMetadata
{
}
- 声明一个局部类
- 附加参考此类的数据注释
- 运行项目。这就是结果
[MetadataType(typeof(StudentMetadata))]
public partial class Student
{
[Display(Name = "Full Name")]
public string FullName
{
get
{
return LastName + ", " + FirstName;
}
}
}
using System.ComponentModel.DataAnnotations;
这两个@Sergik和我的答案都经过测试,两者都很好。
希望对其他人有用。
你想要什么是为你的模型提供只读属性?如果这种情况下创建一个部分类,并添加此属性,并把[System.ComponentModel.DataAnnotations.Schema.NotMapped]属性 – Seminda 2014-09-05 00:28:55
@Seminda的答案应该是接受的。 – balint 2015-02-16 17:56:09