【发布时间】:2012-05-21 23:32:55
【问题描述】:
我有一个dropdownlistfor,其中的值不是来自我的数据库,当用户选择我的数据库中不存在的值时,我想将它保存到数据库中(如果它已经存在,我只需使用现有数据)。
这适用于我的一些数据(请参阅代码以了解它不起作用的地方)
这是我的仓库:
public void newPerson(Person addperson)
{
db.Person.AddObject(addperson);
db.SaveChanges(); //This wont work
}
这是我的控制器:
[HttpPost]
public ActionResult Create(CreateNKIphase1ViewModel model)
{
if (ModelState.IsValid)
{
var goalcard = new GoalCard();
var companyChecker = "";
var dbCompanies = createNKIRep.GetCustomerByName();
var addcustomer = new Customer();
foreach (var existingcustomer in dbCompanies)
{
companyChecker = existingcustomer.CompanyName;
if (existingcustomer.CompanyName == model.CompanyName)
{
var customerId = existingcustomer.Id;
var selectedCustomerID = createNKIRep.GetByCustomerID(customerId);
goalcard.Customer = selectedCustomerID;
break;
}
}
if (companyChecker != model.CompanyName)
{
addcustomer.CompanyName = model.CompanyName;
createNKIRep.newCustomer(addcustomer); //This works!
goalcard.Customer = addcustomer;
}
if (model.PersonName != null)
{
var Personchecker = "";
var dbPersons = createNKIRep.GetPersonsByName();
foreach (var existingPerson in dbPersons)
{
Personchecker = existingPerson.Name;
if (existingPerson.Name == model.PersonName)
{
var personId = existingPerson.Id;
var selectedPersonID = createNKIRep.GetByPersonID(personId);
goalcard.Person = selectedPersonID;
break;
}
}
if (Personchecker != model.PersonName)
{
Person newPerson = new Person();
newPerson.Name = model.PersonName;
createNKIRep.newPerson(newPerson);//Where repository is called
goalcard.Person = newPerson;
}
}
但是当我尝试保存新的Person 时,我收到以下错误消息:
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。 声明已终止。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
尽管Person 在我的数据库中只有Id 和name 作为属性。
我的代码有什么问题吗,或者我的数据库中是否有任何设置需要更改?
提前致谢。
【问题讨论】:
-
对我来说听起来像是与您的数据库有关。你的 Person 表是什么结构?它不包含任何日期时间字段?任何外键或触发器?
-
它有一个导航属性到
Goalcard。还有ID和Name的属性。
标签: database asp.net-mvc linq entity-framework entity-framework-4