Сначала ASP.NET MVC с EF Code - один контроллер и 50 «одинаковых» моделей - PullRequest
2 голосов
/ 15 февраля 2012

У меня около 50 таких «Типовых моделей» (как я их называю), и они выглядят так:

public class BookType{
    public Guid Id { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

public class CarType{
    public Guid Id { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

public class PersonType{
    public Guid Id { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

Так что все эти модели одинаковы для имени класса, все этимодели будут иметь отношения с другими моделями.

Мне нужно разработать функциональность для обеспечения CRUD-операций.Я хочу сделать все это в одном контроллере и 1 представлении для редактирования, 1 для создания и 1 для удаления.

Сначала мы используем код EF для доступа к данным.Поэтому мне нужно сделать что-то вроде:

PersonType tp = new PersonType()
DbContext.PersonTypes.Add(pt)

Но тогда PersonTypes также может иметь тип BookType.Я немного поиграл с отражением и интерфейсами, но безуспешно.

Есть ли какая-нибудь лучшая практика для этого?

У кого-нибудь есть предложения?или примеры?

1 Ответ

1 голос
/ 15 февраля 2012

Поскольку вы хотите выполнять одни и те же операции, независимо от того, являются ли они BookType, CarType и т. Д., Почему бы просто не объединить все это в одну таблицу и добавить столбец Category?

Ваши классы сущностей будут выглядеть так:

public class EditableType {
    public Guid Id { get; set; }
    public int CategoryId { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

public class Category {
    public int Id { get; set; }
    public string Name { get; set; }
}

Вы можете создать enum, если названия ваших категорий известны заранее (что звучит так, как будто они есть).

public enum CategoryToken {
    Book,
    Person,
    Car
    //...
}

Использование:

var personTypes = dbContext.EditableTypes
    .Where(et => et.Category == (int)CategoryToken.Person);
var carTypes = dbContext.EditableTypes
    .Where(et => et.Category == (int)CategoryToken.Car);

var pt = new EditableType
{
    CategoryId = (int)CategoryToken.Person,
    Value1 = "Programmer",
    Value2 = "C#"
};
DbContext.EditableTypes.Add(pt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...