EF Code первый выпуск, без определения ключа - PullRequest
1 голос
/ 28 февраля 2012

Я получаю следующую ошибку при использовании ширины объекта POCO EF

Одна или несколько ошибок проверки были обнаружены во время генерации модели: System.Data.Edm.EdmEntityType :: EntityType «Бренд» не имеет ключа определены. Определите ключ для этого EntityType. System.Data.Edm.EdmEntitySet: EntityType: EntitySet «Бренд» основан для типа «Бренд», для которого не определены ключи.

ПОКО

public class Brand
    {
         //[Key]
        public int BrandId { get; set; }
        public String BrandName { get; set; }
        public String CompanyName { get; set; }
        public Int32 CountryId { get; set; }
        public String Description { get; set; }
    }

DBConetxt

  public class DBContext : DbContext
    {
        public DBContext()
            : base("DBContext")
        { }


        public DbSet<Brand> Brand { get; set; }
        public DbSet<Country> Country { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Brand>().ToTable("dbo.Brand");
            modelBuilder.Entity<Country>().ToTable("dbo.Country");
            base.OnModelCreating(modelBuilder);
        }
    }

Таблица БД

BrandId int
BrandName   varchar
CompanyName varchar
CountryId   int
Description varchar
CreatedBy   int
CreatedDate datetime
ModifiedBy  int
ModifiedDate    datetime

использует

DBContext o = new DBContext();
return o.Brand.ToList();

Если аннотация [Key] используется с POCO для обозначения pk, тогда она работает нормально, но я не хочу использовать какой-либо класс зависимостей с POCO.

Любые предложения ???

Спасибо

1 Ответ

2 голосов
/ 28 февраля 2012

Вы можете настроить PK, используя свободный API.Вам не нужно явно указывать схему базы данных как dbo.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Brand>().ToTable("Brand");
        modelBuilder.Entity<Brand>().HasKey(b => b.BrandId);

        modelBuilder.Entity<Country>().ToTable("Country");
        base.OnModelCreating(modelBuilder);
    }

Вы также можете определить навигационное свойство Country в Brand POCO.

public class Brand
{
    public int BrandId { get; set; }
    public String BrandName { get; set; }
    public String CompanyName { get; set; }
    public Int32 CountryId { get; set; }

    public virtual Country Country {get; set; }

    public String Description { get; set; }
}

Метод действия

    public ActionResult Create()
    {
        ViewData["Countries"] = new SelectList(db.Country.ToList(), 
               "CountryId", "CountryName");

        return View();
    }

Тогда в поле зрения

@Html.DropDownListFor(model => model.CountryId, 
          (IEnumerable<SelectListItem>)ViewData["Countries"], "-")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...