这是我的意思的一个例子:
public class country
{
public int pk_country { get; set; }
public string name { get; set; }
public lang lang { get; set; }
}
public enum lang
{
en = 44,
fr = 33
}
public class person
{
string name { get; set; }
public country country { get; set; }
int pk_country { get; set; }
decimal basicSalary { get; set; }
decimal actualSalary { get { if (country.lang == lang.en) return (decimal)15.99 * basicSalary; else return basicSalary + (decimal)14.99; } }
}
在MVC应用程序中,用户键名为Country(DropDown Select List,因此我们只传递pk_country)和基本工资。
但是,在启动person类时,country对象为null,因此出现此错误:
对象引用未设置为对象的实例
是否有办法让国家/地区对象属性根据从视图传递的选定值pk_country知道其值。
在我的项目中,我使用ViewModel并且我不希望发出数据库请求,即获取所选pk_country的数据集以确定lang
答案 0 :(得分:0)
您必须从数据库中选择它,因为我确定您的国家数量有限,但您可以摆脱此异常
对象引用未设置为对象的实例
只是在其构造函数
中初始化与Person实例关联的国家/地区对象public class person{
public person(){ country=new country(); }string name { get; set; }
public country country { get; set; }
int pk_country { get; set; }
decimal basicSalary { get; set; }
decimal actualSalary { get { if (country.lang == lang.en) return (decimal)15.99 * basicSalary; else return basicSalary + (decimal)14.99; } }}
答案 1 :(得分:0)
创建要存储的npm run doc:buildandserve --theme Postmark
npm run compodoc --theme postmark
实体时,您必须使用所选ID加载person
并分配它。没有办法解决这个问题。
country
从数据库加载现有public person CreatePerson(string name, decimal basicSalary, int countryId) {
var person = new person {
name = name,
basicSalary = basicSalary
};
var country = _dbContext.Country.Find(countryId);
person.country = country;
_dbContext.Person.Add(person);
_dbContext.SaveChanges();
return person;
}
时,如果配置正确,则可以自动加载person
(延迟加载)。请参阅Lazy Loading in Entity Framework。
附加说明:您的类和属性名称不遵守C#命名约定。类和属性名称应以大写字符开头,例如country
代替Person
,person
代替BasicSalary
。只有变量名称应以小写字符开头。