且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在多对多关系中添加对象的简单方法

更新时间: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[^]