我希望在数据库中创建类B和类C的表,并由数据库生成标识。
在我的上下文类中,我有以下代码:
public DbSet<B> BList { get; set; }
public DbSet<C> CList { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<B>().ToTable("BClass");
modelBuilder.Entity<C>().ToTable("CClass");
}
我有一个ContextInitializer类,覆盖Seed方法以在数据库中填充一些测试数据。
protected override void Seed(TestContext context)
{
TestDataClass testData = new TestDataClass();
List<B> bList= testData.GetBList();
foreach (B objB in bList)
{
context.BList.Add(objB);
}
List<C> cList = testData.GetCList();
foreach (C objC in cList)
{
context.CList.Add(objC);
}
context.SaveChanges();
}
这将在数据库中创建BClass和CClass表,但问题是如果我在BClass中插入10行对应的10行到CClass中,实体框架会在BClass中插入20行,其中10行具有实际值,而另外10行为空值。CClass则给出了预期的结果,有10行。
第二个问题是当我从CClass查询数据时,我没有得到结果。错误信息如下:
实体集'CClass'未在实体容器'TestContext'中定义。靠近简单标识符,第1行,第12列。
我正在使用Huy Nguyen的帖子中的代码,用于Entity Framework 4 POCO、Repository和Specification Pattern [升级到EF 4.1],网址为http://huyrua.wordpress.com/2011/04/13/entity-framework-4-poco-repository-and-specification-pattern-upgraded-to-ef-4-1/,我的通用存储库代码如下:
public IList<TEntity> FindAll<TEntity>() where TEntity : class
{
DbContext.Set<TEntity>();
var entityName = GetEntityName<TEntity>();
return ((IObjectContextAdapter)DbContext).ObjectContext.CreateQuery<TEntity>(entityName).ToList<TEntity>();
}
private string GetEntityName<TEntity>() where TEntity : class
{
DbContext.Set<TEntity>();
return string.Format("{0}.{1}", ((IObjectContextAdapter)DbContext).ObjectContext.DefaultContainerName, _pluralizer.Pluralize(typeof(TEntity).Name));
}
我尝试更改我的表映射,但没有帮助。我不知道我在这里缺少什么,也不确定该怎么做。我迫切需要帮助。
提前致谢。
这是我的实际类的样子:
public abstract class EntityBase
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
public virtual string CreatedBy { get; set; }
public virtual DateTime? CreatedOn { get; set; }
public virtual string LastModifiedBy { get; set; }
public virtual DateTime? LastModifiedOn { get; set; }
}
public class Person: EntityBase
{
public virtual string FirstName { get; set; }
public virtual string MiddleName { get; set; }
public virtual string LastName { get; set; }
public virtual DateTime? BirthDate { get; set; }
[NotMapped]
public virtual string FullName
{
get
{
return String.Format("{0}, {1} {2}", LastName, FirstName, MiddleName);
}
}
}
public partial class Employee : Person
{
[Required]
public string EmployeeNumber { get; set; }
[Required]
public string department { get; set; }
public DateTime? JoiningDate { get; set; }
public DateTime? PromotionDate { get; set; }
}
现在我的上下文类具有以下内容:
public DbSet<EntityBase> People { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().ToTable("Person");
modelBuilder.Entity<Employee>().Map(m => m.MapInheritedProperties()).ToTable("Employee");
}