Определите ключ для этого EntityType - PullRequest
1 голос
/ 06 марта 2011

Я получаю эту ошибку в этой строке кода -

    ReportRunnerEntities reportDB = new ReportRunnerEntities();

    public ActionResult Index()
    {
        **var types = reportDB.ReportTypes.ToList();**
        return View(types);
    }

Для таблиц в базе данных определены первичные ключи и установлены идентификаторы.

Мои модели -

namespace ReportRunner.Models
{
    public partial class ReportRunnerEntities : DbContext
    {
        public DbSet<Reports> Report { get; set; }
        public DbSet<ReportTypes> ReportTypes { get; set; }
        public DbSet<Users> Users { get; set; }
    }
}

namespace ReportRunner.Models
{
    public partial class ReportTypes
    {
        public int ReportTypeId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public List<Reports> Reports { get; set; }
    }
}

namespace ReportRunner.Models
{
    public class Reports
    {
        public int ReportId { get; set; } 
        public int ReportTypeId { get; set; }
        public int UserId { get; set; } 
        public string Title { get; set; }
        public ReportTypes ReportType { get; set; }
    }

}

namespace ReportRunner.Models
{
    public partial class Users
    {
        public int UserId { get; set; } //ArtistId
        public string Name { get; set; }
    }
}

и вот моя строка подключения -

Я подозреваю, что он никогда не достигнет базы данных. Как я уже сказал, ключи установлены в базе данных.

Я что-то упустил?

1 Ответ

2 голосов
/ 06 марта 2011

Я вижу пару вещей, которые должны измениться:

  • Типы отчетов должны быть ReportType

  • публичный список отчетов {get; задавать; } должен быть публичным ICollection Reports {get; задавать; }

  • Если вы определяете Строка подключения в вашем web.config, Вы должны сказать EF, что это такое используя конструктор в вашем Класс ReportRunnerEntities выглядит так:


    namespace ReportRunner.Models
    {
        public partial class ReportRunnerEntities : DbContext
        {
            public ReportRunnerEntities : base("name=NameOfConnectionInWebConfig")
            {}
            public DbSet<Reports> Report { get; set; }
            public DbSet<ReportTypes> ReportTypes { get; set; }
            public DbSet<Users> Users { get; set; }
        }
    }
    

Подробнее об этом можно прочитать здесь: http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

Кстати, если вы планируете использовать .NET MVC и EF Code First в качестве стека, я бы начал использовать шаблон Repository and Unit of Work. Вот хороший пост о том, как это настроить: Entity Framework 4 CTP 4 / CTP 5 Общий шаблон репозитория и тестируемый модуль

...