我正在使用EF 6,数据库优先方法。所以我手动创建所有的Domain对象。我想用我的SQL Server表映射这些类。如果我执行以下操作(在我的DbContext中),那么我的代码可以工作......
public virtual DbSet<countries> countries { get; set; }
但问题是,我宁愿不这样做,因为数据库有很多表,并且会继续增长。
我读到了使用表属性来映射带有Sql表的表,但它没有工作并抛出Enityt未找到/映射错误。
下面是我的GenericRepo,其中有一个方法GetAll()。
public abstract class GenericRepository<C, T> :
IGenericRepository<T> where T : class where C : DbContext, new()
{
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
以下是我的DbCopntext
public class PhotoContext: DbContext
{
public PhotoContext()
: base("PhotoDatabase")
{
}
// if I unComment this, then Code Works
//public virtual DbSet<countries> countries { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
以下是我的县回购,它简单地继承了Generic Repo
public class countriesRepository: GenericRepository<PhotoContext, Models.DomainModels.countries>
{
}
下面是我的域对象,我的Sql Server也有一个名为“Countries”的表。所以我用Table属性注释它,
[Table("countries")]
public class countries
{
[Column("Country_Name")]
public string Country_Name { get; set; }
[Key]
[Column("CountryCode")]
public string CountryCode { get; set; }
[Column("sort")]
public int sort { get; set; }
}
最后,这就是我如何称呼回购。
var a = new countriesRepository();
var r = a.GetAll().ToList();
我收到错误。
System.InvalidOperationException:'实体类型国家/地区不属于当前上下文的模型。