异常:"类型未映射#34;在实体框架代码中首先使用图层

时间:2014-11-10 13:31:08

标签: asp.net-mvc-4 entity-framework-6 code-first

我试图在使用mvc和实体框架开发的演示项目上应用LAYERS Concept    数据注释:用于数据访问层和数据的验证    Fluent API:用于映射和表关系

问题:DbContext没有创建数据库,并且存在运行时异常:

类型' Domain.DataLayer.Member'没有映射。使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承。

代码:我的解决方案包括: 1-类库(Domain.Classes项目):我编写了所有类

public class Member
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string FullName { get; set; }

}

2- DAL(Domain.DataLayer项目):另一个类库,我引用了domain.classes

namespace Domain.DataLayer.Repositories
{
   [MetadataType(typeof(MemberMetadata))]
   public partial class Member : Classes.Member , IValidatableObject
   {
     public Member()
     {
        Tasks = new HashSet<Task>();
        History = new HashSet<Commint>();
     }
     public string ConfirmPassword { get; set; } 
     public HashSet<Task> Tasks { get; set; }
     public HashSet<Commint> History { get; set; }

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
     {
        var result = new List<ValidationResult>();
        if (!string.Equals(Password,ConfirmPassword))
        {
            result.Add(new ValidationResult("mismatch pwsd", new[] {"ConfirmPassword" }));
        }
        return result;
     }
  } 
}

我使用了存储库模式:

public class MemberRepository : IRepository<Member>
{
    public Task<IQueryable<Member>> GetAllEntities()
    {
        return Task<IQueryable<Member>>.Factory.StartNew(() => new Context().Members.AsQueryable());
    }
}

3-BLL:为简单起见:没有业务逻辑层

4- PL(Domain.Application MVC Project):成员控制器:

    public async Task<ActionResult> Index()
    {
        var members = await _repository.GetAllEntities();
        return View(members);
    }

注意:我依赖于DbContext创建名称为:Domain.DataLayer.Context的DB,但它没有创建数据库所以我创建了数据库并通过Context构造函数传递了connectionString,如下所示:

namespace Domain.DataLayer
{
  public class Context : DbContext
  {
    public Context(): base("InterviewDemo") // i tried also base("name=InterviewDemo")
    {
    }

    public DbSet<Member> Members { get; set; }
    public DbSet<Task> Tasks { get; set; }
    public DbSet<Commint> TaskHistory { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new MemberConfig());
        modelBuilder.Configurations.Add(new TaskConfig());
        modelBuilder.Configurations.Add(new CommintConfig());
        base.OnModelCreating(modelBuilder);
    }
  }
}

0 个答案:

没有答案