Модель скаффолдинга с наследованием в ASP.NET MVC 3 и Entity Framework - PullRequest
1 голос
/ 08 июня 2011

Я опробую новые функции скаффолдинга в MVC 3, используя Entity Framework Code First.Моя модель выглядит следующим образом:

public abstract class A
{
    public int Id { get; set; }
}

public class B : A
{
    public string Name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<A> As { get; set; }
}

Я создаю новый контроллер с помощью мастера новых контроллеров в MVC и выбираю тип лесов A. Сгенерирован код CRUD, и я могу успешно запустить проект в веб-браузере.Когда я пытаюсь создать новый A, я получаю следующее сообщение об ошибке:

«Невозможно создать абстрактный класс»

, что имеет смысл.A является абстрактным.

Могу ли я использовать строительные леса для создания B и других унаследованных классов из A?

1 Ответ

2 голосов
/ 09 ноября 2011

AFAIK вы должны добавить

using System.ComponentModel.DataAnnotations;

[Table("TableNameForB")]
public class B : A
{
    public string Name { get; set; }
}

как атрибут для вашего конкретного класса

Найдите здесь полный пример

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace ZooLabPoco
{
    public class Context : DbContext
    {
        public DbSet<Animal> Animals { get; set; }
        public DbSet<Zoo> Zoos { get; set; }
    }

    public class Zoo
    {
        public int Id { get; set; }
        public virtual ICollection<Animal> Animals { get; set; }
        public Zoo()
        {
            this.Animals = new List<Animal>();
        }
    }

    public abstract class Animal
    {
        public int Id { get; set; }
        public int ZooId { get; set; }
        public virtual Zoo Zoo { get; set; }
    }

    [Table("Lions")]
    public class Lions : Animal
    {
        public string LionName { get; set; }
    }

    [Table("Tigers")]
    public class Tigers : Animal
    {
        public string TigerName { get; set; }
        public int TailLength { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {

            var context = new Context();
            context.Database.Delete();
            context.Database.CreateIfNotExists();


            var zoo = new Zoo();
            zoo.Animals.Add(new Lions { LionName = "Fritz" });
            zoo.Animals.Add(new Lions { LionName = "Jerry" });
            zoo.Animals.Add(new Tigers { TigerName = "Pluto" });

            context.Zoos.Add(zoo);
            context.SaveChanges();

        }
    }
}
...