5

今天是个好日子,

我对我目前的开发有疑问,问题是我已经为我的数据访问层创建了一个使用 ntier 和数据应用程序块的项目,所以,我有一个名为 Entities 的包,我在其中创建了所有类并且我试图使用错误映射到资源文件的消息问题是当我编写以下代码时,它标记为错误:

(实体基客户端)

public partial class Clients {

public Int32 Id {get;set;}
[Display(Name="Name", 
ResourceType=typeof(Resources.Language))] 
[Required(AllowEmptyStrings=false, 
ErrorMessageResourceName="Id", 
ErrorMessageResourceType=typeof(Resources.Language))] 
public string Name {get;set;}
}

在下面的代码中,它标记了“资源”(这是我放置资源文件的文件夹)中的错误,而“语言”是资源文件。

但是当我在“模型”文件夹上做同样的事情时并没有标记任何错误

(模型-客户)

public Int32 Id {get;set;}
[Display(Name="Name", 
ResourceType=typeof(Resources.Language))] 
[Required(AllowEmptyStrings=false, 
ErrorMessageResourceName="Id", 
ErrorMessageResourceType=typeof(Resources.Language))] 
public string Name {get;set;}
}

我做错了什么吗?我是否缺少 RF 的参考或配置?

提前致谢

4

2 回答 2

1
[Display(Name = "Name"), Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName ="nameHasToBeGiven")]
        public string name { get; set; }

这个更容易

于 2018-06-04T09:02:57.150 回答
0

这是一个老问题。为了解决这个问题,我停用了 EDMX 代码生成并创建了外部 TT 文件来生成: DomainLayer:包含 EF EDMX 类(带导航)

DataLayer : 包含查询数据的东西

[Serializable]
public partial class Contact : _DomainLayer_Base  
{
    #region Primitive Properties

    /// <summary>
    /// Gets or sets Id.
    /// </summary>
    /// <value>The Id.</value>
    public virtual int Id
    {
        get;
        set;
    }

    /// <summary>
    /// Gets or sets FK_Language.
    /// </summary>
    /// <value>The FK_Language.</value>
    /// <remarks>
    /// Foregn key of Contact
    /// 
    /// </remarks>
    public virtual int FK_Language
    {
        get { return _fK_Language; }
        set
        {
            try
            {
                _settingFK = true;
                if (_fK_Language != value)
                {
                    if (Language != null && Language.Id != value)
                    {
                        Language = null;
                    }
                    _fK_Language = value;
                }
            }
            finally
            {
                _settingFK = false;
            }
        }
    }
}

MetaDataLayer:包含 EF 独立类,数据注释链接到资源(无导航)

    [Serializable]
    public partial class Contact_MetaData : _MetaDataLayer_Base
    {
        [Display(Name = "Ety_Contact_Id" , ResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.MetaDataResources))]
        [Required(ErrorMessageResourceName = "ErrMsgRequired",ErrorMessageResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.Resources))]    
    public virtual int Id
    {
        get;
        set;
    }
    [Display(Name = "Ety_Contact_FK_Language" , ResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.MetaDataResources))]
    [Required(ErrorMessageResourceName = "ErrMsgRequired",ErrorMessageResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.Resources))]    
    public virtual int FK_Language
    {
        get;
        set;

    }

MetaModels :在门户内部,MetaModels 是 MetaData 成员容器。它们包含门户所需的数据。示例:如果您有外键,则 ForeignKey 值将在 MetaData 中,但用于填充查找的 ListItems 将在 MetaModel 中。EntityLayer:包含 EF EDMX

当我创建一个 EF 查询时,我在结果前面加上 db :

当我在视图中使用数据时,我使用我的 MetaDataLayer :

public class ContactViewer_MetaModel : Contact_MetaData

要将数据从 DomainLayer 传输到 MetaDataLayer,我使用 Emit Mapper,因为我的 TT 文件保证 Domain 和 MetaData 之间的签名相同。

toReturn = ObjectMapperManager.DefaultInstance.GetMapper<Contact, ContactViewer_MetaModel>().Map(dbContact);

在视图中:

@model InnovaApp.Layers.SecurityLayer.Models.MetaModels.Contact_MetaModel
@Html.HiddenFor(m => m.Id)
<ol class="olMainForm">
    <li>
        @Html.LabelFor(m => m.FK_Genre)
        @Html.DropDownListFor(m => m.FK_Genre, Model.Genres)
        @Html.ValidationMessageFor(m => m.FK_Genre)
    </li>
</ol>

你可以在这里找到完整的源代码:

https://myprettycms.codeplex.com

于 2013-10-18T06:00:51.080 回答