EntityFramework 5.0中的基类/实体

Ami*_*ila 8 c# asp.net-mvc ef-database-first asp.net-mvc-4 entity-framework-5

我在Database First方法中使用Entity Framework 5,我正在使用edmx文件.

我的大多数实体都有6个常见字段.像场CreatedAt,CreatedBy等等.现在,我实现一些功能只能应用于扩展IQueryable那些有共同的领域实体.但是当我实现扩展方法时,它可以被任何类型IQueryable的类型T访问,我只能定义类型T应该总是一种类型.

所以,我认为我可以为具有公共字段的实体提供基类,并将类型T定义为该基类型.但是,我似乎无法做到这一点.

关于如何解决这个问题或者实现我上面解释过的任何想法?

ata*_*ati 9

不要创建基类.创建一个接口,如下所示:

public interface IMyEntity
{
    DateTime CreatedAt { get; set; }
    string CreatedBy { get; set; }
    // Other properties shared by your entities...
}
Run Code Online (Sandbox Code Playgroud)

然后,您的模型将是这样的:

[MetadataType(typeof(MyModelMetadata))]
public partial class MyModel : IMyEntity
{
   [Bind()]  
   public class MyModelMetadata
   {
      [Required]
      public object MyProperty { get; set; }

      [Required]
      public string CreatedBy { get; set; }  
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 您不接触自动生成的代码.这就是应该使用的部分类.您为EF中的每个实体创建一个部分类(在Models文件夹下).您可以在此处为模型定义MetadataType(用于数据注释).请参阅更新的答案. (2认同)