【发布时间】:2012-02-09 18:44:49
【问题描述】:
我有一个从数据库创建的 edmx 模型和一个 metadata.cs。
在客户端中,.g.cs 包括 [StringLength(X)] 属性以及来自我的元数据的属性。
我正在为与这些实体的客户端编辑器分开的平面文件导入进行一些服务器端验证。
我能够应用我的范围和正则表达式验证,但我无法在服务器上找到 StringLength 属性。有谁知道如何做到这一点,而无需在元数据属性上手动复制 StringLength 属性。
编辑:
这里有一些代码:
服务器端文件ProductService.metadata.cs:
internal sealed class PRODUCTMetadata
{
[Required]
[RegularExpression("[A-Z]+")]
[Display(Name = "Product Code", Order = 10)]
public string Product_code { get; set; }
}
客户端 Generated_Code\NameSpace.Web.g.cs:
public sealed class PRODUCT
{
[DataMember()]
[Display(Name="Product Code", Order=10)]
[RegularExpression("[A-Z]+")]
[Required()]
[StringLength(8)] //This is what I want to know, but server side
public string Product_code
{...etc
}
}
【问题讨论】:
-
请说明客户端和服务器下的含义?您有 WCF 服务、其他类型的服务或某种 Web UI 客户端吗?
-
@OleksandrPshenychnyy 这是服务器端 ASP 网站项目上的“启用 Silverlight 的 WCF 服务”。客户端是 Silverlight,这是自动生成的
.g.cs文件所在的位置,这是正确的,但我无法从服务器代码访问它。 -
抱歉,我对 Silverlight 没有经验。但一般来说,通过 WCF 服务使用同一个对象进行 DB 访问和通信并不是一个好习惯。其实我不明白为什么 edmx 文件会在客户端生成一些属性?您的客户是否可以直接访问数据库???这是服务器的责任。
-
不,它不是,这只是 EF 服务的工作方式。客户端属性用于启用客户端验证。我添加了一个例子。这真的不是 Silverlight 问题,因为我想在完全不涉及客户端的情况下执行此操作,只是碰巧客户端自动生成的代码比服务器知道的更多!
-
两天前我遇到了同样的问题。您的
ProductService.metadata.cs文件是由 EF(服务器端)生成的,还是您自己创建的自定义元数据文件?
标签: c# entity-framework wcf-ria-services