我正在尝试使用ADO在实体之间建立关系。
public class Banner
{
public int IdBanner { get; set; }
public string NameBanner { get; set; }
public string Media { get; set; }
public Country Country{ get; set; }
}
public class Country
{
public int IdCountry { get; set; }
public string NameCountry { get; set; }
}
在我的另一个类(DAL)中,我有一个方法和这个方法我需要在Country Class中插入一个属性,就像我的例子:
public List<Banner> Listar()
{
List<Banner> lista = new List<Banner>();
using (SqlConnection conn = ConnectionDAL.GetConnection())
{
String sql = "BannerListar";
using (SqlCommand command = new SqlCommand(sql, conn))
{
command.CommandType = CommandType.StoredProcedure;
try
{
conn.Open();
SqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
Banner obj = new Banner();
if (dr["IdBanner"] != DBNull.Value)
obj.IdBanner = Convert.ToInt32(dr["IdBanner"]);
if (dr["NameBanner"] != DBNull.Value)
obj.NameBanner = dr["NameBanner"].ToString();
if (dr["Media"] != DBNull.Value)
obj.Media = dr["Media"].ToString();
//HERE the problem
if (dr["NameCountry"] != DBNull.Value)
obj.Country.NameCountry = dr["NameCountry"].ToString();
lista.Add(obj);
}
}
catch
{
throw;
}
finally
{
conn.Close();
conn.Dispose();
}
return lista;
}
}
}
当我这样做时,向我展示一个这样的错误:“使用'new'关键字来创建一个对象实例” 我该如何解决?
答案 0 :(得分:3)
在初始化NameCountry
之前,您必须创建Country类的对象 if (dr["NameCountry"] != DBNull.Value)
{
Country country = new Country();
country.NameCountry = dr["NameCountry"].ToString();
obj.Country = country;
}
答案 1 :(得分:1)
您已创建类Banner
的对象,但未创建类Country
的横幅中包含的对象。所以在使用它之前创建它。您可以在Banner
类的默认构造函数中执行此操作。
public class Banner
{
public Banner() //Add the default constructor and initiate the Country object
{
Country = new Country();
}
public int IdBanner { get; set; }
public string NameBanner { get; set; }
public string Media { get; set; }
public Country Country{ get; set; }
}
我已经找到了可能出现问题的原因,并提出了一种解决方案,可以用最少的努力摆脱错误,并故意保持简单以便更好地理解。您可以通过显式传递Country或传递null代替Country来扩展它,或者创建Country
Object并将其分配给Banner
中的对象。
答案 2 :(得分:0)
在Banner类中Country是Country类的class属性。因此,如果首先在此属性中添加值,则需要为该类创建对象。
添加以下行: -
obj.Country = new Country();
if (dr["NameCountry"] != DBNull.Value)
obj.Country.NameCountry = dr["NameCountry"].ToString();