Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 向派生类型添加属性_Entity Framework_C# - Fatal编程技术网

Entity framework 向派生类型添加属性

Entity framework 向派生类型添加属性,entity-framework,c#,Entity Framework,C#,我和你一起工作。我有一个叫做Company的分部类,它是由EF生成的。分部类如下所示: 类型“BaseModels.Company”已包含“CompanyName”的定义 我要做的是从具有额外属性的公司创建一个派生类 public class MyCompany : Company { public string UploadName { get; set; } } 但是我想用一个自定义属性来修饰基类型属性CompanyName 我去了以下地点: 这确实回答了我的问题。问题是如果我在

我和你一起工作。我有一个叫做Company的分部类,它是由EF生成的。分部类如下所示:

类型“BaseModels.Company”已包含“CompanyName”的定义

我要做的是从具有额外属性的公司创建一个派生类

public class MyCompany : Company {
    public string UploadName { get; set; }
}
但是我想用一个自定义属性来修饰基类型属性CompanyName

我去了以下地点:

这确实回答了我的问题。问题是如果我在基类中将CompanyName属性标记为“virtual”,那么EF可以重新生成代码,从而覆盖我的内容

我试图定义一个分部类,但当我试图添加时,VS 2013抱怨:

public partial class Company {
    [Renderer("html")]
    public virtual string CompanyName { get; set; }
}
声明属性名称已存在


如何绕过这个障碍?

将Company设置为抽象类。然后使用override关键字with CompanyName添加自定义属性。还可以添加UploadName。

不能使用分部类定义已经存在的属性。如果在现有属性上添加属性,则需要使用MetadataTypeAttribute。创建分部class:

[MetadataType(typeof(CompanyMetadata))]
public partial class Company { }
并使用具有所需属性的属性将元数据类添加到项目中:

public class CompanyMetadata
{
    [Renderer("html")]
    public string CompanyName { get; set; }
}

VS2013抱怨什么???
。您在子类中重写它的位置..?Visual Studio生成的错误消息表示“类型'BaseModels.Company'已包含'CompanyName'的定义”“。这是我在同一项目中试图定义的部分类。这是EF数据库吗…”。。?如果是这样的话,这里有一个链接可以一步一步地读取,那么就没有办法从派生类型向非虚拟基成员添加属性。您不能使用
partial
更改成员,只能添加成员。我会咬紧牙关,使用不同的类型。使用实体类型仅用于处理数据,并将它们映射到您可以随意装饰的“域”类型。除非你想做一些奇怪的映射,否则像AutoMapper这样的工具可以让它变得非常简单。但是Company类是由实体框架生成的。我不确定那将如何解决这个问题。
public class CompanyMetadata
{
    [Renderer("html")]
    public string CompanyName { get; set; }
}