更新时间:2023-11-28 21:51:04
为了在实体框架中创建M-> M关系,你需要使用映射类,就像使用Config_OptionVal一样。现在重要的是,该映射类是关系任一侧的类通过的映射类,您不能忽略该关系中的该实体。因此:
public class ConfigurationCollection
{
public int ConfigurationCollectionID {获得跨度>; set ; }
public string CollectionName { get 跨度>; set ; }
public int LsystemID { get 跨度>; set ; }
public virtual Lsystem Lsystem {获得跨度>; set ; }
public virtual ICollection< Config_OptionVal> Config_OptionVals { get ; set ; }
}
public class OptionValue
{
public int OptionValueID { get ; set ; }
public string OptionVal { get 跨度>; set ; }
public int OptionID { get 跨度>; set ; }
public virtual ICollection< Config_OptionVal> Config_OptionVals { get ; set ; }
public virtual 选项选项{ get ; set ; }
}
public class Config_OptionVal
{
public int Config_OptionValID { get ; set ; }
public int OptionValueID { get 跨度>; set ; }
public int ConfigurationCollectionID { get 跨度>; set ; }
public bool OptionValChecked { get 跨度>; set ; }
public virtual OptionValue OptionValue {获得跨度>; set ; }
public virtual ConfigurationCollection ConfigurationCollection { get ; set ; }
}
通过此关系访问使用Config_OptionVal,如下所示:
myContext.Set< config_optionval>()。其中(x = > x.OptionValueID == IDofInterest)。 ToArray的();
myContext.Set< Config_OptionVal>()。其中(x = > x.ConfigurationCollectionID == IDofInterest)。ToArray();
ConfigurationCollectionObject.Config_OptionVal.Select(x = > x.OptionValue)。ToArray();
OptionValueObject.Config_OptionVal.Select(x = > x.ConfigurationCollection)。ToArray();
< / config_optionval >
因此,在您的控制器示例中,假设LSystem和ConfigurationCollection为1> 1:
public ActionResult Create( int LsystemID )
{
var model = new ConfigurationCollection
{
LsystemID = LsystemID,
Lsystem = db.Lsystem.FirstOrDefault(x = > x.LsystemID == LsystemID),
OptionValues = Lsystem!= null
? Lsystem.ConfigurationCollection.Config_OptionVal.Select(x = > x.OptionValues)。ToList()
: new 列表< optionvalue>();
};
return 查看(模型);
}
< / optionvalue >
以及几个示例/教程:
MVC 5,实体框架6和多对多关系:一步一步查看模型方法 [ ^ ]
https://msdn.microsoft.com/en-us/library/dd742359.aspx [ ^ ]
I have 2 classes `ConfigurationCollection` and `OptionValues` which has a many to many relationship. I have tried solutions on the net to get it working. I tried adding another class to create two one to many relationship. But I am not understanding it the right way I suppose. And I also tried it without adding a third class.
Model classes
public class ConfigurationCollection
{
public int ConfigurationCollectionID { get; set; }
public string CollectionName { get; set; }
public int LsystemID { get; set; }
public virtual Lsystem Lsystem { get; set; }
public virtual ICollection<OptionValue> OptionValues { get; set; }
}
public class OptionValue
{
public int OptionValueID { get; set; }
public string OptionVal { get; set; }
public int OptionID { get; set; }
public virtual ICollection<ConfigurationCollection> ConfigurationCollections { get; set; }
public virtual Option Option { get; set; }
}
public class Config_OptionVal
{
public int Config_OptionValID { get; set; }
public int OptionValueID { get; set; }
public int ConfigurationCollectionID { get; set; }
public bool OptionValChecked { get; set; }
public virtual OptionValue OptionValue { get; set; }
public virtual ConfigurationCollection ConfigurationCollection { get; set; }
}
Controller
public ActionResult Create(int LsystemID)
{
var model = new ConfigurationCollection
{
LsystemID = LsystemID,
Lsystem = db.Lsystem.FirstOrDefault(x => x.LsystemID == LsystemID),
OptionValues=new List<OptionValue>()
};
return View(model);
}
I am not sure what should be written in the Controller. I am able to populate the `OptionValues` in my View. I am just missing something that could save the data into the database.
In order to create a M->M relationship in entity Framework you'll need to use a mapping class, as you did with Config_OptionVal. Now it's important that that mapping class is the one that the classes on either side of the relationship operate through, you can't ignore that entity in the relationship. Therefore:public class ConfigurationCollection { public int ConfigurationCollectionID { get; set; } public string CollectionName { get; set; } public int LsystemID { get; set; } public virtual Lsystem Lsystem { get; set; } public virtual ICollection<Config_OptionVal> Config_OptionVals{ get; set; } } public class OptionValue { public int OptionValueID { get; set; } public string OptionVal { get; set; } public int OptionID { get; set; } public virtual ICollection<Config_OptionVal> Config_OptionVals{ get; set; } public virtual Option Option { get; set; } } public class Config_OptionVal { public int Config_OptionValID { get; set; } public int OptionValueID { get; set; } public int ConfigurationCollectionID { get; set; } public bool OptionValChecked { get; set; } public virtual OptionValue OptionValue { get; set; } public virtual ConfigurationCollection ConfigurationCollection { get; set; } }
Access across this relationship uses Config_OptionVal, like this:myContext.Set<config_optionval>().Where(x => x.OptionValueID == IDofInterest).ToArray(); myContext.Set<Config_OptionVal>().Where(x => x.ConfigurationCollectionID == IDofInterest).ToArray(); ConfigurationCollectionObject.Config_OptionVal.Select(x => x. OptionValue).ToArray(); OptionValueObject.Config_OptionVal.Select(x => x.ConfigurationCollection).ToArray(); </config_optionval>
So in your controller example, assuming LSystem and ConfigurationCollection are 1->1:public ActionResult Create(int LsystemID) { var model = new ConfigurationCollection { LsystemID = LsystemID, Lsystem = db.Lsystem.FirstOrDefault(x => x.LsystemID == LsystemID), OptionValues= Lsystem != null ? Lsystem.ConfigurationCollection.Config_OptionVal.Select(x => x.OptionValues).ToList() : new List<optionvalue>(); }; return View(model); } </optionvalue>
And a couple of examples/tutorials:
MVC 5, Entity Framework 6 and Many to Many Relationship : a step by step View Model approach[^]
https://msdn.microsoft.com/en-us/library/dd742359.aspx[^]