我知道在使用模型优先开发时,您可以使用t4模板生成的部分类来添加元数据。 e.g。
public partial class Address
{
public int Id { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
然后在另一个文件中,我这样做:
[MetadataType(typeof(AddressMetadata))]
public partial class Address {
}
internal sealed class AddressMetadata {
[Display(Name = "Street")]
public string Street1 { get; set; }
[Display(Name = "Street (cont.)")]
public string Street2 { get; set; }
[Display(Name = "Zip code")]
public string Zip { get; set; }
}
我尝试为EDMX文件中定义的枚举类型执行此操作。
// this doesn't work
[MetadataType(typeof(ContactTypeMetadata))]
public enum ContactType {
}
public class ContactTypeMetadata {
}
这样做,我收到以下错误:
Error 1 The namespace 'Models' already contains a definition for 'ContactType'
无论如何,对于枚举而言,是否可以为模型优先项目中的类执行相同的功能?
修改
在EDMX文件中,我定义了一个枚举类型:
namespace WindowsFormsApplication1
{
using System;
public enum ContactType : int
{
CEO = 0,
CIO = 1,
Peasant = 2
}
}
我试图找到一种使用类似机制的方法(在单独的文件中,这样如果我修改了EDMX,我的更改就不会被覆盖)来实现这一目标:
namespace WindowsFormsApplication1
{
using System;
public enum ContactType : int
{
[Display(Name="Chief Executive Officer")]
CEO = 0,
[Display(Name="Chief Information Officer")]
CIO = 1,
[Display(Name="Regular Employee")]
Peasant = 2
}
}
答案 0 :(得分:11)
您需要为枚举禁用代码生成。您可以通过引用外部类型来执行此操作。
在.edmx之外创建一个枚举。例如。 项目根目录中的ContactType.cs,只要您知道它所在的命名空间,就可以将它放在任何位置。
从您已创建的edmx枚举中复制出当前代码,并将其粘贴到新创建的ContactType.cs文件中,如下所示。
<强> ContactType 强>
using System;
namespace YourEnumNamespace
{
public enum ContactType : int
{
[Display(Name="Chief Executive Officer")]
CEO = 0,
[Display(Name="Chief Information Officer")]
CIO = 1,
[Display(Name="Regular Employee")]
Peasant = 2
}
}
现在在.edmx模型中删除现有的ContactType枚举,它位于“枚举类型”部分下的“模型浏览器”中,只需选择并删除即可。
返回解决方案浏览,打开edmx并右键单击某处,然后点击“添加新内容”。然后是“Enum Type&#39;。
最后命名你的枚举类型ContactType并勾选参考外部类型,这里完全限定你之前显示的你创建的自定义枚举。例如。 YourEnumNamespace.ContactType。
这告诉edmx使用外部枚举,而不是在edmx本身内生成枚举代码。
最后,在您希望使用自定义枚举的edmx文件中的实体内,选择要与自定义枚举一起使用的属性,在这种情况下,我将其称为MyContactTypeProperty
并将属性类型更改为自定义枚举。
你去吧。无需为尝试声明部分枚举等而烦恼,因为记录中您无法获得部分枚举。无论如何,这将做你需要的。祝你好运!