实体框架使用表注释属性映射SQL表

时间:2018-03-25 01:42:17

标签: c# entity-framework entity-framework-6 dbcontext

我正在使用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:'实体类型国家/地区不属于当前上下文的模型。

0 个答案:

没有答案