我试图在使用mvc和实体框架开发的演示项目上应用LAYERS Concept 数据注释:用于数据访问层和数据的验证 Fluent API:用于映射和表关系
问题:DbContext没有创建数据库,并且存在运行时异常:
代码:我的解决方案包括: 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);
}
}
}