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
C# 包含多个类型的类型列表的c MVC实体框架模型属性_C#_Asp.net Mvc_Entity Framework_Model View Controller - Fatal编程技术网

C# 包含多个类型的类型列表的c MVC实体框架模型属性

C# 包含多个类型的类型列表的c MVC实体框架模型属性,c#,asp.net-mvc,entity-framework,model-view-controller,C#,Asp.net Mvc,Entity Framework,Model View Controller,我目前正在从事一个结合Entity Framework的C MVC项目,其中我有一个视图页面Create页面,用户需要在该页面上填写所需的数据。我得到了一个类似下面代码的模型。其中,用户有一条船,可以选择其属性 public class Boat { public string Name{ get; set; } } public class Slowboat : Boat { public int Length { get; set; } public virtual

我目前正在从事一个结合Entity Framework的C MVC项目,其中我有一个视图页面Create页面,用户需要在该页面上填写所需的数据。我得到了一个类似下面代码的模型。其中,用户有一条船,可以选择其属性

public class Boat {
    public string Name{ get; set; }
}

public class Slowboat : Boat {
    public int Length { get; set; }
    public virtual Engine SpeedSource { get; set; }
}

public class Speedboat : Boat {
    public virtual List<?> SpeedSource { get; set; }
    public int Topspeed {get; set; }
}

public class Engine {
    public string EningeType { get; set; }
    public int Horsepower { get; set; }
    public string Manufacturer { get; set; }
}

public class Sail {
    public int SailCount { get; set; }
    public List<int> SailSizes { get; set; }
    public string Manufacturer { get; set; }
}
public interface ISpeedSource {
    string Manufacturer { get; set; }
}

public class Speedboat : Boat {
    public virtual List<ISpeedSource> SpeedSource { get; set; }
    public int Topspeed {get; set; }
}
所以我的问题是:如何将多个类型存储到一个列表中

谢谢你提供了一个可能的解决方案

编辑:正如Thomas Flinkow所建议的,我可以制作一个具有一些共同属性的界面

public class Boat {
    public string Name{ get; set; }
}

public class Slowboat : Boat {
    public int Length { get; set; }
    public virtual Engine SpeedSource { get; set; }
}

public class Speedboat : Boat {
    public virtual List<?> SpeedSource { get; set; }
    public int Topspeed {get; set; }
}

public class Engine {
    public string EningeType { get; set; }
    public int Horsepower { get; set; }
    public string Manufacturer { get; set; }
}

public class Sail {
    public int SailCount { get; set; }
    public List<int> SailSizes { get; set; }
    public string Manufacturer { get; set; }
}
public interface ISpeedSource {
    string Manufacturer { get; set; }
}

public class Speedboat : Boat {
    public virtual List<ISpeedSource> SpeedSource { get; set; }
    public int Topspeed {get; set; }
}
那么,如果我使用这样的界面,其他属性会被保存吗?

您可以这样定义所有速度源:

public class Engine : ISpeedSource { ... }

public class Sail : ISpeedSource { ... }
public class Speedboat : Boat 
{
    public virtual List<ISpeedSource> SpeedSource { get; set; }
    public int Topspeed { get; set; }
}
ISpeedSource是一个简单的接口,可能是空的,但不一定是接口

public interface ISpeedSource { ... }
然后你的快艇课是这样的:

public class Engine : ISpeedSource { ... }

public class Sail : ISpeedSource { ... }
public class Speedboat : Boat 
{
    public virtual List<ISpeedSource> SpeedSource { get; set; }
    public int Topspeed { get; set; }
}

您可能想按照David的建议过度思考您的设计,因为。

听起来概念建模好像被打破了。引擎和帆不是一回事。那么SpeedSource到底是什么呢?也许你的船可以有一组发动机和一组帆作为单独的集合?有些船只是有一个或另一个空的集合。除非您可以定义SpeedSource的通用接口。如您所述,应避免使用空接口。更具体地说,在本例中,当从客户机发布表单时,我怀疑模型绑定器是否知道如何处理空界面。如果模型绑定器只知道它是ISpeedSource的集合,而ISpeedSource没有属性,那么它可能不会在该集合中存储任何有用的内容。@Thomas Flinkow我喜欢界面的建议,因为有一些常见属性,所以我编辑了我的问题。但是我还有一个普通类,它有一个根据speedSource类型不同大小的列表,在我的应用程序前端限制这个列表大小是否足够?@Kitesaint1309如果我理解正确,您希望接口有一个列表吗?如果是这样,您可以这样做:接口{IList MyList{get;}如果不一定要限制大小。@ThomasFlinkow是这样的,我的情况是类似接口{IList CrewNames{get;set;}这取决于船的类型。帆船需要比引擎船更多的船员。@Kitesaint1309好吧,那很好,imo应该可以工作。