Asp.net mvc 4 例外情况:;类型未映射";在entityframework中,首先使用层进行编码
我试图将层的概念应用到使用mvc和实体框架开发的演示项目中 数据注释:用于数据访问层和 Fluent API:用于映射和表关系 问题:DbContext未创建DB,存在运行时异常: 未映射类型“Domain.DataLayer.Member”。检查是否未使用Ignore方法或NotMappeAttribute数据批注明确排除该类型。验证该类型是否定义为类、是否为基元、嵌套或泛型,以及是否从EntityObject继承。 代码:我的解决方案包括: 1-类库(Domain.Classes项目):我在其中编写所有类Asp.net mvc 4 例外情况:;类型未映射";在entityframework中,首先使用层进行编码,asp.net-mvc-4,entity-framework-6,code-first,Asp.net Mvc 4,Entity Framework 6,Code First,我试图将层的概念应用到使用mvc和实体框架开发的演示项目中 数据注释:用于数据访问层和 Fluent API:用于映射和表关系 问题:DbContext未创建DB,存在运行时异常: 未映射类型“Domain.DataLayer.Member”。检查是否未使用Ignore方法或NotMappeAttribute数据批注明确排除该类型。验证该类型是否定义为类、是否为基元、嵌套或泛型,以及是否从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;
}
}
}
namespace Domain.DataLayer.Repositories
{
[元数据类型(typeof(MemberMetadata))]
公共部分类成员:Classes.Member,IValidatableObject
{
公职人员()
{
Tasks=newhashset();
历史=新的HashSet();
}
公共字符串ConfirmPassword{get;set;}
公共哈希集任务{get;set;}
公共哈希集历史记录{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
var result=新列表();
如果(!string.Equals(Password,ConfirmPassword))
{
Add(新的ValidationResult(“不匹配的pwsd”,新的[]{“ConfirmPassword”}));
}
返回结果;
}
}
}
我使用了存储库模式:
public class MemberRepository : IRepository<Member>
{
public Task<IQueryable<Member>> GetAllEntities()
{
return Task<IQueryable<Member>>.Factory.StartNew(() => new Context().Members.AsQueryable());
}
}
公共类成员存储库:IRepository
{
公共任务getAllenties()
{
返回Task.Factory.StartNew(()=>newcontext().Members.AsQueryable());
}
}
3-BLL:为了简单起见:没有业务逻辑层
4-PL(域应用程序MVC项目):成员控制器:
public async Task<ActionResult> Index()
{
var members = await _repository.GetAllEntities();
return View(members);
}
公共异步任务索引()
{
var members=await_repository.getAllenties();
返回视图(成员);
}
注意:我依赖DbContext来创建名为:Domain.DataLayer.Context的DB,但它没有创建DB,所以我创建了DB并通过上下文构造函数传递了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);
}
}
}
namespace Domain.DataLayer
{
公共类上下文:DbContext
{
public Context():base(“InterviewDemo”)//我也尝试了base(“name=InterviewDemo”)
{
}
公共数据库集成员{get;set;}
公共数据库集任务{get;set;}
公共数据库集任务历史记录{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
添加(newmemberconfig());
modelBuilder.Configurations.Add(newtaskconfig());
modelBuilder.Configurations.Add(newcommintconfig());
基于模型创建(modelBuilder);
}
}
}