Asp.net mvc ASP.NET MVC w/EF代码优先-一个控制器和50';同样的';模型
我有50个这样的“类型模型”(我叫它们),它们看起来像这样:Asp.net mvc ASP.NET MVC w/EF代码优先-一个控制器和50';同样的';模型,asp.net-mvc,oop,ef-code-first,Asp.net Mvc,Oop,Ef Code First,我有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 {
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; }
}
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; }
}
所有这些模型的类名都是相同的,所有这些模型都与其他模型有关系
我需要设计一个功能来提供CRUD操作。我想在一个控制器中完成这一切,一个视图用于编辑,一个视图用于创建,一个视图用于删除
我们首先使用EF代码进行数据访问。所以我必须做一些类似的事情:
PersonType tp = new PersonType()
DbContext.PersonTypes.Add(pt)
但是,PersonTypes也可以是BookType类型。我用反射和界面玩了一会儿,但没有成功
这方面没有什么最佳实践吗?
有人有什么建议吗?或者示例?既然您想要执行相同的操作,不管它是
图书类型
、卡片类型
,等等,为什么不将所有这些统一到一个表中并添加一个类别
列呢
您的实体类如下所示:
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; }
}
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
用法:
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)
“Value1”和“Value2”是一种代码气味。仔细查看对象模型,看看是否可以更明确地描述对象属性。然后,您可能会想实现一个表/类型继承方案(Google it,您会发现很多)。您是使用value1、value2作为示例,即每个类存储不同的数据,还是实际的属性称为value1等?如果将来他们想添加其他特定于类别的属性,该模型将崩溃。@Eranga,true,但问题的前提是,50个类别的设计是相同的。我不知道这在将来是否会发生变化,但就目前而言,编写50个除了名称之外完全相同的类似乎违反了DRY。