0

是的,我有一个项目,我正在使用我的 EF 6.x 实体,就好像它们也是我的 ViewModels - 我没有 AutoMap - 我已经研究并了解了风险。

我的数据库有很多自然键。在我的 Code First POCO 中,我的属性如下所示:

Partial Public Class ProfilePriceGroup

    <Key> <DatabaseGenerated(DatabaseGeneratedOption.None)>
    Public Property ProfileId As Long

    Public Property TargetRegion As String

    Public Property Discount As Decimal = 0D

End Class

我正在尝试编辑脚手架模板(我的项目通过 SideWaffle VSIX 具有“CodeTemplates”目录),并且我特别试图影响默认为 MvcView/Edit.vb.t4 生成的剃须刀

由于关键是反映回模型绑定器的重要信息,因此默认脚手架呈现隐藏输入,但是,在它是 DatabaseGeneratedOption.None 的情况下 - 我希望它会呈现一个额外的可见标签,以便用户很容易理解什么'ProfileId ' 他们正在编辑。

换句话说,默认脚手架假定代理键在视图中不感兴趣,但是,我的键对我的视图很有趣。

我对作为实现此目标的 System.Web.Mvc 命名空间的一部分的 <HiddenInput(DisplayValue:=True)> DataAnnotation 不感兴趣。我现在确实想让我的 EF 项目不受 MVC 库的影响。

我可以很容易地看到当前的 MVC 脚手架如何从传入的 ModelMetadata 参数(Microsoft.AspNet.Scaffolding.Core.Metadata.ModelMetadata 类型)迭代各种类型的 PropertyMetadata

但是,我如何跨越并获取这个 DatabaseGenerated 属性,我认为它源自 System.Data.Metadata.Edm 命名空间?

4

1 回答 1

0

在这里,您可以看到我的 Edit.vb.t4 模板生成的脚手架片段:

@Using (Html.BeginForm())
    @Html.AntiForgeryToken()

    @<div class="form-horizontal">
    <h4><#= ConvertCamelCaseStr(ViewDataTypeShortName) #></h4>
    <hr />
    @Html.ValidationSummary(true)
<#
For Each modelProperty As PropertyMetadata in ModelMetadata.Properties
    If (modelProperty.Scaffold) AndAlso (Not modelProperty.IsAssociation) Then
    If (modelProperty.IsPrimaryKey) Then
            If (modelProperty.IsAutoGenerated) Then
#>
    @Html.HiddenFor(Function(model) model.<#= modelProperty.PropertyName #>)
<#
            Else
#>
        <!-- natural key - we will show the value and a hidden input -->
        <div class="form-group">
            @Html.LabelFor(Function(model) model.<#= modelProperty.PropertyName #>, New With { .class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DisplayFor(Function(model) model.<#= modelProperty.PropertyName #>)
                @Html.HiddenFor(Function(model) model.<#= modelProperty.PropertyName #>)
            </div>
        </div>
<#
            End If
    ElseIf (Not modelProperty.IsReadOnly)
#>

使我的脚手架工作的部分是If (modelProperty.IsAutoGenerated) Then一块.. 我的特别之处在于它Else与 OOTB T4 MVC 5/EntityFramework 模板不同

于 2015-04-24T19:38:12.823 回答