在多对多关系中添加对象的简单方法 [英] Simple approach to add objects in a many to many relationship
问题描述
我有2个类`ConfigurationCollection`和`OptionValues`,它们具有多对多的关系。我在网上尝试过解决方案让它运转起来。我尝试添加另一个类来创建两个一对多的关系。但我不是以正确的方式理解它。而且我也尝试了它而没有添加第三类。
模型类
<前lang =c#> public class ConfigurationCollection
{
public int ConfigurationCollectionID { get ; set ; }
public string CollectionName { get 跨度>; set ; }
public int LsystemID { get 跨度>; set ; }
public virtual Lsystem Lsystem {获得跨度>; 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 选项选项{ 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 ; }
}
控制器
public ActionResult Create( int LsystemID)
{
var model = new ConfigurationCollection
{
LsystemID = LsystemID,
Lsystem = db.Lsystem.FirstOrDefault(x = > x.LsystemID == LsystemID),
OptionValues = new 列表< OptionValue>()
};
return 查看(模型);
}
我不确定控制器中应该写什么。我可以在我的视图中填充`OptionValues`。我只是遗漏了可以将数据保存到数据库中的东西。为了在实体框架中创建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[^]
这篇关于在多对多关系中添加对象的简单方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!