在多对多关系中添加对象的简单方法 [英] Simple approach to add objects in a many to many relationship

查看:78
本文介绍了在多对多关系中添加对象的简单方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆