C# 首先从现有数据库中编写如何使用关系的代码
我有一个包含3个表的数据库。旅游、优惠和旅游优惠。旅游包含旅游的地点和价格。优惠是旅游的特别优惠,旅游商店什么旅游有什么优惠 举例如下: 当我首先从现有的DB生成代码时,从表Tours和Offers创建了两个类 如何使用ToursOffers表来保持表之间的关系?例如,旅游在组合框中,我如何在文本框中显示所选的旅游产品 我的功能代码:C# 首先从现有数据库中编写如何使用关系的代码,c#,winforms,entity-framework,ef-code-first,C#,Winforms,Entity Framework,Ef Code First,我有一个包含3个表的数据库。旅游、优惠和旅游优惠。旅游包含旅游的地点和价格。优惠是旅游的特别优惠,旅游商店什么旅游有什么优惠 举例如下: 当我首先从现有的DB生成代码时,从表Tours和Offers创建了两个类 如何使用ToursOffers表来保持表之间的关系?例如,旅游在组合框中,我如何在文本框中显示所选的旅游产品 我的功能代码: private void onload(object sender, EventArgs e)//Populate Product Name drop down
private void onload(object sender, EventArgs e)//Populate Product Name drop down.
{
Tours tour = new tours();
dataSource = tour.GetAll();
comboBox1.DisplayMember = "Tour"; // set display member
comboBox1.ValueMember = "PID"; // value member as Id to use at selectedIndex changed
comboBox1.DataSource = dataSource;
offerSource = tour.GetAllOffers();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.DataSource = dataSource;
decimal price = dataSource.Where(x => x.PID == (int)comboBox1.SelectedValue)
.FirstOrDefault().Price.Value;
textBox1.Text = price.ToString("0.00"); // set result to two decimal places
textBox2.Text = //RELATED OFFER
}
我有一个想法:
string offers = offerSource
.Where(x => x.Equals(comboBox1.SelectedValue))
.FirstOrDefault().OfferDescription;
发生System.NullReferenceException HResult=0x80004003Message=对象引用未设置为对象的实例 编辑1 课程简介:
public partial class Tour
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Tour()
{
Offers = new HashSet<Offer>();
}
public int PID { get; set; }
[Required]
[StringLength(40)]
public string Tour { get; set; }
[Column(TypeName = "money")]
public decimal? Price { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Offer> Offers { get; set; }
}
public partial class Offer
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Offer()
{
Products = new HashSet<Product>();
}
public int OfferID { get; set; }
[Required]
[StringLength(60)]
public string Desc { get; set; }
[StringLength(10)]
public string Code { get; set; }
}
公共部分班级巡回演出
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公众旅游()
{
Offers=newhashset();
}
公共int-PID{get;set;}
[必需]
[行政长官(40)]
公共字符串巡更{get;set;}
[列(TypeName=“money”)]
公共十进制?价格{get;set;}
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2227:CollectionPropertiesShouldBreadOnly”)]
公共虚拟ICollection提供{get;set;}
}
提供生成的类:
public partial class Tour
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Tour()
{
Offers = new HashSet<Offer>();
}
public int PID { get; set; }
[Required]
[StringLength(40)]
public string Tour { get; set; }
[Column(TypeName = "money")]
public decimal? Price { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Offer> Offers { get; set; }
}
public partial class Offer
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Offer()
{
Products = new HashSet<Product>();
}
public int OfferID { get; set; }
[Required]
[StringLength(60)]
public string Desc { get; set; }
[StringLength(10)]
public string Code { get; set; }
}
公共部分课程优惠
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公开发售()
{
Products=新的HashSet();
}
公共int OfferID{get;set;}
[必需]
[条次建议修正案(60)]
公共字符串Desc{get;set;}
[条次建议修正案(10)]
公共字符串代码{get;set;}
}
和型号:
public Model1()
: base("name=Model1")
{
}
public virtual DbSet<Offer> Offers { get; set; }
public virtual DbSet<Tour> Tours { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Offer>()
.Property(e => e.Code)
.IsFixedLength();
modelBuilder.Entity<Offer>()
.HasMany(e => e.Tours)
.WithMany(e => e.Offers)
.Map(m => m.ToTable("TourOffers").MapLeftKey("OfferID").MapRightKey("PID"));
modelBuilder.Entity<Tour>()
.Property(e => e.Price)
.HasPrecision(19, 4);
}
publicmodel1()
:base(“name=Model1”)
{
}
公共虚拟数据库集提供{get;set;}
公共虚拟数据库集{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(e=>e.Code)
.IsFixedLength();
modelBuilder.Entity()
.HasMany(e=>e.Tours)
.WithMany(e=>e.Offers)
.Map(m=>m.ToTable(“TourOffers”).MapLeftKey(“OfferID”).MapRightKey(“PID”);
modelBuilder.Entity()
.物业(e=>e.价格)
.精确性(19,4);
}
@MickyD Ha是的,这听起来确实很奇怪,但这正是微软文档所说的令人惊奇的!那边的人应该被一块柠檬打一巴掌……包裹在一块大金砖上。;)包括代码优先实体您有相关的模型(对象/类)可以添加到您的问题中,我们可以看一下吗?另一方面,您可以使用dataSource.FirstOrDefault(x=>x.PID==(int)comboBox1.SelectedValue)简化linq查询代码>同样适用于您的另一部分code@12seconds是的,给我12秒钟,我会在编辑中发布