我知道在进行模型优先开发时,您可以使用由 t4 模板生成的部分类来添加元数据。例如
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
}
}
最佳答案
您需要为枚举禁用代码生成。您可以通过引用外部类型来做到这一点。
在您的 .edmx 之外创建一个枚举。例如。 ContactType.cs 位于您项目的根目录中,但您可以将其放置在您喜欢的任何位置,只要您知道它所在的命名空间即可。
从您已创建的 edmx 枚举中复制当前代码并将其粘贴到新创建的 ContactType.cs 文件中,如下所示。
联系人类型
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 并右键单击某处并单击“添加新”,然后单击“枚举类型”。
最后将您的枚举类型命名为 ContactType 并勾选 Reference External type,此处完全限定您创建的自定义枚举,如我之前所示。例如。 YourEnumNamespace.ContactType.
这告诉 edmx 使用外部枚举而不是在 edmx 本身内生成枚举代码。
最后,在您希望使用自定义枚举的 edmx 文件中的实体中,选择您想要与自定义枚举一起使用的属性,在本例中我将其命名为 MyContactTypeProperty
并将属性类型更改为您的自定义枚举。
好了。无需费力地尝试声明部分枚举等,因为您不能拥有部分枚举。无论如何,这将做你需要的。祝你好运!
关于c# - Entity Framework 模型-第一个枚举类型元数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25332834/