Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC w/EF代码优先-一个控制器和50';同样的';模型_Asp.net Mvc_Oop_Ef Code First - Fatal编程技术网

Asp.net mvc ASP.NET MVC w/EF代码优先-一个控制器和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 {

我有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; }
}
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。