AKo*_*ran 26 entity-framework custom-attributes
有没有办法在EF生成的代码中为属性添加自定义属性?我唯一可以看到的是一个合理的解决方案是提出一个自定义的T4模板.但是,由于属性的性质,不可能为每个EF属性确定正确的属性参数.
Dre*_*kes 35
您可以通过指定镜像属性的元数据类型来执行此操作,并仅用于归因.
[MetadataType(typeof(Dinner_Validation))]
public partial class Dinner
{}
public class Dinner_Validation
{
[Required]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
史蒂夫史密斯在这里写博客.
不幸的是,上述方法对于重构来说是脆弱的.另一种选择是使用新的POCO实体.就我所知,这些完全避免了编译时代码生成.我还没有使用它们,所以不能评论任何陷阱或权衡.
小智 12
您可以将此项添加到EDMX文件中,还可以使用Designer:
<Property Name="Nome" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" >
<Documentation>
<Summary>[MyCustomAttribute]</Summary>
</Documentation>
</Property>
Run Code Online (Sandbox Code Playgroud)
并取代T4:
void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty)
{
WriteProperty(Accessibility.ForProperty(edmProperty),
code.Escape(edmProperty.TypeUsage),
code.Escape(edmProperty),
code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
Run Code Online (Sandbox Code Playgroud)
附:
void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty)
{
if(edmProperty.Documentation != null && string.IsNullOrWhiteSpace(edmProperty.Documentation.Summary) == false)
{
#>
<#=edmProperty.Documentation.Summary#>
<#+
}
WriteProperty(Accessibility.ForProperty(edmProperty),
code.Escape(edmProperty.TypeUsage),
code.Escape(edmProperty),
code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}
Run Code Online (Sandbox Code Playgroud)
您可以在界面上创建界面和声明属性.
partial class Person : IPerson {}
public interface IPerson
{
[Required]
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20765 次 |
| 最近记录: |