C# 空引用ASP.Net MVC实体
在这一行_repository.CreateDealer(d); 我得到下面的错误 我已经开始根据本教程的基础知识编写代码 IdealRepository.csC# 空引用ASP.Net MVC实体,c#,asp.net-mvc-3,entity,datacontext,C#,Asp.net Mvc 3,Entity,Datacontext,在这一行_repository.CreateDealer(d); 我得到下面的错误 我已经开始根据本教程的基础知识编写代码 IdealRepository.cs public void CreateDealer(DealersTemp.DealerHolder dealer) { using (DealerContext context = new DealerContext()) { context.Entry(new DealersTemp.Deal
public void CreateDealer(DealersTemp.DealerHolder dealer)
{
using (DealerContext context = new DealerContext())
{
context.Entry(new DealersTemp.DealerHolder
{
//DealerHolderId = dealer.DealerHolderId,
id = dealer.id,
locationId = dealer.locationId,
address = dealer.address,
name = dealer.name,
logicalName = dealer.logicalName,
type = dealer.type,
make = dealer.make,
operations = dealer.operations,
contactinfo = dealer.contactinfo,
publishDate = dealer.publishDate,
active = dealer.active,
syncPublishDate = dealer.syncPublishDate
}).State = System.Data.EntityState.Added;
context.SaveChanges();
}
}
namespace DealerTentSaleMVC.Repository
{
public interface IDealerRepository
{
IEnumerable<DealersTemp.DealerHolder> GetAllDealers();
void CreateDealer(DealersTemp.DealerHolder dealer);
DealersTemp.DealerHolder ReadDealer(int id);
void UpdateDealer(DealersTemp.DealerHolder dealer);
void DeleteDealer(int id);
}
}
下面是显示整个控制器代码的更新
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Objects.DataClasses;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DealerTentSaleMVC.Models;
using System.Net;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using DealerTentSaleMVC.Repository;
namespace DealerTentSaleMVC.Controllers
{
public class EdmundsController : Controller
{
private static string GetApiKey() { return "AIzaSyDiOm4qmnR7ZPbPPiUJrIxfYZ0XreDMaW8"; }
private DealersTemp.RootObject db = new DealersTemp.RootObject();
private IDealerRepository _repository;
//
// GET: /Edmunds/
public ViewResult Index()
{
return View(_repository.GetAllDealers());
}
//
// GET: /Edmunds/Details/5
public ViewResult Details(int id)
{
DealersTemp.DealerHolder dealerholder = _repository.ReadDealer(id);
return View(dealerholder);
}
//
// GET: /Edmunds/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Edmunds/Create
public class Result
{
public ICollection<DealersTemp.DealerHolder>DealerHolder { get; set; }
}
//[HttpPost]
//public ActionResult Create(BlogPost blogpost)
//{
// if (ModelState.IsValid)
// {
// _repository.CreateBlogPost(blogpost);
// return RedirectToAction("Index");
// }
// return View(blogpost);
//}
[HttpPost]
public ActionResult Create(string zip, string make)
{
string url = "http://api.edmunds.com/v1/api/dealer?zipcode=" + zip.Replace(" ", "") + "&makeName=" + make.Replace(" ", "") + "&radius=3000&fmt=json&api_key=8rqtk3bb4bc4xgydqspvmc2s";
//WebRequest request = WebRequest.Create(url);
WebClient wc = new WebClient();
string stws = wc.DownloadString(url);
JToken root = JObject.Parse(stws);
JToken dealerholder = root["dealerHolder"];
DealerTentSaleMVC.Models.DealersTemp.DealerHolder convertedProducts = new DealerTentSaleMVC.Models.DealersTemp.DealerHolder();
string dh = dealerholder.ToString().Replace("[", "").Replace("]", "");
Result result = JsonConvert.DeserializeObject<Result>(stws);
foreach (var d in result.DealerHolder)
{
DealersTemp.DealerHolder newD = new DealersTemp.DealerHolder { active=d.active, contactinfo=d.contactinfo, address=d.address, id=d.id, locationId=d.locationId, logicalName=d.logicalName, make=d.make, name=d.name, operations=d.operations, publishDate=d.publishDate, syncPublishDate=d.syncPublishDate, type=d.type };
_repository.CreateDealer(d);
}
//DataContractJsonSerializer jsonSerializer =
// new DataContractJsonSerializer(typeof(DealersTemp.RootObject));
//DealersTemp.RootObject products = (DealersTemp.RootObject)jsonSerializer.ReadObject(ws.GetResponseStream());
//List<DealersTemp.DealerHolder> convertProducts = (DealersTemp.DealerHolder)products.dealerHolder;
return RedirectToAction("Index");
}
//
// GET: /Edmunds/Edit/5
public ActionResult Edit(int id)
{
DealersTemp.DealerHolder dealer = _repository.ReadDealer(id);
return View(dealer);
}
//
// POST: /Edmunds/Edit/5
[HttpPost]
public ActionResult Edit(DealerTentSaleMVC.Models.DealersTemp.DealerHolder dealerholder)
{
if (ModelState.IsValid)
{
_repository.UpdateDealer(dealerholder);
return RedirectToAction("Index");
}
return View(dealerholder);
}
//
// GET: /Edmunds/Delete/5
public ActionResult Delete(int id)
{
DealersTemp.DealerHolder dealer = _repository.ReadDealer(id);
return View(dealer);
}
//
// POST: /Edmunds/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
_repository.DeleteDealer(id);
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.Objects.DataClass;
使用System.Data.Entity;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用DealerTentSaleMVC.Models;
Net系统;
使用System.Runtime.Serialization.Json;
使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
使用System.IO;
使用DealerTentSaleMVC.Repository;
命名空间DealerTentSaleMVC.Controllers
{
公共类EdmundsController:控制器
{
私有静态字符串GetApiKey(){返回“AIzaSyDiOm4qmnR7ZPbPPiUJrIxfYZ0XreDMaW8”}
private DealersTemp.RootObject db=new DealersTemp.RootObject();
私人理想存储库;
//
//获取:/Edmunds/
公共视图结果索引()
{
返回视图(_repository.GetAllDealers());
}
//
//获取:/Edmunds/Details/5
公共视图结果详细信息(int id)
{
DealerTemp.DealerHolder=\u repository.ReadDealer(id);
返回视图(dealerholder);
}
//
//获取:/Edmunds/Create
公共操作结果创建()
{
返回视图();
}
//
//POST:/Edmunds/Create
公开课成绩
{
公共ICollectionDealerHolder{get;set;}
}
//[HttpPost]
//公共操作结果创建(BlogPost BlogPost)
//{
//if(ModelState.IsValid)
// {
//_repository.CreateBlogPost(blogpost);
//返回操作(“索引”);
// }
//返回视图(blogpost);
//}
[HttpPost]
公共操作结果创建(字符串压缩、字符串生成)
{
字符串url=”http://api.edmunds.com/v1/api/dealer?zipcode=“+zip.Replace(“,”)+“&makeName=“+make.Replace(“,”)+”&radius=3000&fmt=json&api_key=8rqtk3bb4bc4xgydqspvmc2s”;
//WebRequest=WebRequest.Create(url);
WebClient wc=新的WebClient();
字符串stws=wc.DownloadString(url);
JToken root=JObject.Parse(stws);
JToken dealerholder=根[“dealerholder”];
DealerTentSaleMVC.Models.DealersTemp.DealerHolder convertedProducts=new DealerTentSaleMVC.Models.DealersTemp.DealerHolder();
字符串dh=dealerholder.ToString().Replace(“[”,”).Replace(“]”,”);
结果=JsonConvert.DeserializeObject(stws);
foreach(result.DealerHolder中的变量d)
{
DealerTemp.DealerHolder newD=new DealerTemp.DealerHolder{active=d.active,contactinfo=d.contactinfo,address=d.address,id=d.id,locationId=d.locationId,logicalName=d.logicalName,make=d.make,name=d.name,operations=d.operations,publishDate=d.publishDate,syncPublishDate=d.syncPublishDate,type=d.type};
_储存库.CreateDealer(d);
}
//DataContractJsonSerializer jsonSerializer=
//新的DataContractJsonSerializer(typeof(DealersTemp.RootObject));
//DealersTemp.RootObject产品=(DealersTemp.RootObject)jsonSerializer.ReadObject(ws.GetResponseStream());
//列出convertProducts=(DealerTemp.DealerHolder)products.DealerHolder;
返回操作(“索引”);
}
//
//获取:/Edmunds/Edit/5
公共操作结果编辑(int id)
{
DealerTemp.DealerHolder dealer=\u repository.ReadDealer(id);
返回视图(经销商);
}
//
//POST:/Edmunds/Edit/5
[HttpPost]
公共操作结果编辑(DealerTentSaleMVC.Models.DealerTemp.DealerHolder DealerHolder)
{
if(ModelState.IsValid)
{
_repository.updateAler(dealerholder);
返回操作(“索引”);
}
返回视图(dealerholder);
}
//
//获取:/Edmunds/Delete/5
公共操作结果删除(int id)
{
DealerTemp.DealerHolder dealer=\u repository.ReadDealer(id);
返回视图(经销商);
}
//
//POST:/Edmunds/Delete/5
[HttpPost,ActionName(“删除”)]
公共行动结果删除已确认(内部id)
{
_repository.DeleteDealer(id);
返回操作(“索引”);
}
受保护的覆盖无效处置(布尔处置)
{
基地。处置(处置);
}
}
}
您没有显示所有控制器代码或注册,因此我最好的猜测是您没有正确注册依赖项,并且存储库为空。由于缺少代码,很难分辨。您是否确保\u repository
和d
不为空?private idealrepository\u repository;我刚刚更新了整个控制器,我调试的代码为NOTNULL,它显示为NOTNULL
namespace DealerTentSaleMVC.Models
{
public class DealersTemp
{
public class Address
{
//public int AddressId { get; set; }
public string street { get; set; }
public string apartment { get; set; }
public string city { get; set; }
public string stateCode { get; set; }
public string stateName { get; set; }
public string county { get; set; }
public string country { get; set; }
public string zipcode { get; set; }
public double latitude { get; set; }
public double longitude { get; set; }
//public virtual int DealerHolderId { get; set; }
}
public class Operations
{
//public int OperationsId { get; set; }
public string Wednesday { get; set; }
public string Tuesday { get; set; }
public string Thursday { get; set; }
public string Saturday { get; set; }
public string Friday { get; set; }
public string Monday { get; set; }
public string Sunday { get; set; }
//public virtual int DealerHolderId { get; set; }
}
public class Contactinfo
{
//[Key]
//public int ContactinfoId { get; set; }
public string dealer_website { get; set; }
public string email_address { get; set; }
public string phone { get; set; }
//public string phone_areacode { get; set; }
//public string phone_postfix { get; set; }
//public string phone_prefix { get; set; }
//public virtual int DealerHolderId { get; set; }
}
public class DealerHolder
{
//[Key]
//public int DealerHolderId { get; set; }
public string id { get; set; }
public string locationId { get; set; }
public Address address { get; set; }
public string name { get; set; }
public string logicalName { get; set; }
public string type { get; set; }
public string make { get; set; }
public Operations operations { get; set; }
public Contactinfo contactinfo { get; set; }
public string publishDate { get; set; }
public bool active { get; set; }
public string syncPublishDate { get; set; }
public DealersTemp.DealerHolder ToDomainDealer()
{
return new DealersTemp.DealerHolder
{
//DealerHolderId = this.DealerHolderId,
id = this.id,
locationId = this.locationId,
address = this.address,
name = this.name,
logicalName = this.logicalName,
type = this.type,
make = this.make,
operations = this.operations,
contactinfo = this.contactinfo,
publishDate = this.publishDate,
active = this.active,
syncPublishDate = this.syncPublishDate
};
}
}
public class RootObject
{
public List<DealerHolder> dealerHolder { get; set; }
}
}
[HttpPost]
public ActionResult Create(string zip, string make)
{
string url = "http://api.edmunds.com/v1/api/dealer?zipcode=" + zip.Replace(" ", "") + "&makeName=" + make.Replace(" ", "") + "&radius=3000&fmt=json&api_key=SomeKey";
//WebRequest request = WebRequest.Create(url);
WebClient wc = new WebClient();
string stws = wc.DownloadString(url);
JToken root = JObject.Parse(stws);
JToken dealerholder = root["dealerHolder"];
DealerTentSaleMVC.Models.DealersTemp.DealerHolder convertedProducts = new DealerTentSaleMVC.Models.DealersTemp.DealerHolder();
string dh = dealerholder.ToString().Replace("[", "").Replace("]", "");
Result result = JsonConvert.DeserializeObject<Result>(stws);
foreach (DealersTemp.DealerHolder d in result.DealerHolder)
{
_repository.CreateDealer(d);
}
return RedirectToAction("Index");
}
namespace DealerTentSaleMVC.Context
{
public class DealerContext: DbContext
{
public DbSet<DealersTemp.DealerHolder> Dealers { get; set; }
}
}
{
"dealerHolder": [
{
"id": "31711",
"locationId": "3730",
"address": {
"street": "24825 US Hwy 19 N",
"apartment": "",
"city": "Clearwater",
"stateCode": "FL",
"stateName": "Florida",
"county": "Pinellas",
"country": "USA",
"zipcode": "33763",
"latitude": 27.99785,
"longitude": -82.729321
},
"name": "Countryside Ford of Clearwater",
"logicalName": "CountrysideFordofClearwater",
"type": "ROOFTOP",
"make": "Ford",
"operations": {
"Wednesday": "8:30 AM-9:00 PM",
"Tuesday": "8:30 AM-9:00 PM",
"Thursday": "8:30 AM-9:00 PM",
"Saturday": "8:30 AM-8:00 PM",
"Friday": "8:30 AM-9:00 PM",
"Monday": "8:30 AM-9:00 PM",
"Sunday": "11:00 AM-5:00 PM"
},
"contactinfo": {
"dealer_website": "http://www.clearwaterford.com/",
"email_address": "",
"phone": ""
},
"publishDate": "2012-05-25",
"active": true,
"syncPublishDate": "2012-05-25"
},
{
"id": "31673",
"locationId": "3708",
"address": {
"street": "2525 34th St N",
"apartment": "",
"city": "Saint Petersburg",
"stateCode": "FL",
"stateName": "Florida",
"county": "Pinellas",
"country": "USA",
"zipcode": "33713",
"latitude": 27.794484,
"longitude": -82.679411
},
"name": "Autoway Ford of St Petersburg",
"logicalName": "AutowayFordofStPetersburg",
"type": "ROOFTOP",
"make": "Ford",
"operations": {
"Wednesday": "08:30 AM-08:00 PM",
"Tuesday": "08:30 AM-08:00 PM",
"Thursday": "08:30 AM-08:00 PM",
"Saturday": "09:00 AM-06:00 PM",
"Friday": "08:30 AM-08:00 PM",
"Monday": "08:30 AM-08:00 PM",
"Sunday": "12:00 PM-05:00 PM"
},
"contactinfo": {
"dealer_website": "http://www.autowayford.net/",
"email_address": "",
"phone": ""
},
"publishDate": "2012-05-25",
"active": true,
"syncPublishDate": "2012-05-25"
},
{
"id": "31636",
"locationId": "3684",
"address": {
"street": "5815 N Dale Mabry Hwy",
"apartment": "",
"city": "Tampa",
"stateCode": "FL",
"stateName": "Florida",
"county": "Hillsborough",
"country": "USA",
"zipcode": "33614",
"latitude": 28.00016,
"longitude": -82.505206
},
"name": "Bill Currie Ford",
"logicalName": "BillCurrieFord",
"type": "ROOFTOP",
"make": "Ford",
"operations": {
"Wednesday": "8:00 AM-9:00 PM",
"Tuesday": "8:00 AM-9:00 PM",
"Thursday": "8:00 AM-9:00 PM",
"Saturday": "8:00 AM-8:00 PM",
"Friday": "8:00 AM-9:00 PM",
"Monday": "8:00 AM-9:00 PM",
"Sunday": "11:00 AM-6:00 PM"
},
"contactinfo": {
"dealer_website": "http://billcurriedirect.dealerconnection.com/",
"email_address": "",
"phone_areacode": "888",
"phone_postfix": "1156",
"phone_prefix": "255",
"phone": "8882551156"
},
"publishDate": "2012-05-25",
"active": true,
"syncPublishDate": "2012-05-25"
},
{
"id": "31723",
"locationId": "3739",
"address": {
"street": "17556 US 19 N",
"apartment": "",
"city": "Clearwater",
"stateCode": "FL",
"stateName": "Florida",
"county": "Pinellas",
"country": "USA",
"zipcode": "33764",
"latitude": 27.93164,
"longitude": -82.730647
},
"name": "Walker Ford",
"logicalName": "WalkerFord",
"type": "ROOFTOP",
"make": "Ford",
"operations": {
"Wednesday": "8:30 AM-8:00 PM",
"Tuesday": "8:30 AM-8:00 PM",
"Thursday": "8:30 AM-8:00 PM",
"Saturday": "8:30 AM-6:00 PM",
"Friday": "8:30 AM-8:00 PM",
"Monday": "8:30 AM-8:00 PM",
"Sunday": "11:30 AM-6:00 PM"
},
"contactinfo": {
"dealer_website": "http://www.walkerford.com/",
"email_address": "",
"phone_areacode": "727",
"phone_postfix": "3673",
"phone_prefix": "535",
"phone": "7275353673"
},
"publishDate": "2012-05-25",
"active": true,
"syncPublishDate": "2012-05-25"
}
]
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Objects.DataClasses;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DealerTentSaleMVC.Models;
using System.Net;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using DealerTentSaleMVC.Repository;
namespace DealerTentSaleMVC.Controllers
{
public class EdmundsController : Controller
{
private static string GetApiKey() { return "AIzaSyDiOm4qmnR7ZPbPPiUJrIxfYZ0XreDMaW8"; }
private DealersTemp.RootObject db = new DealersTemp.RootObject();
private IDealerRepository _repository;
//
// GET: /Edmunds/
public ViewResult Index()
{
return View(_repository.GetAllDealers());
}
//
// GET: /Edmunds/Details/5
public ViewResult Details(int id)
{
DealersTemp.DealerHolder dealerholder = _repository.ReadDealer(id);
return View(dealerholder);
}
//
// GET: /Edmunds/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Edmunds/Create
public class Result
{
public ICollection<DealersTemp.DealerHolder>DealerHolder { get; set; }
}
//[HttpPost]
//public ActionResult Create(BlogPost blogpost)
//{
// if (ModelState.IsValid)
// {
// _repository.CreateBlogPost(blogpost);
// return RedirectToAction("Index");
// }
// return View(blogpost);
//}
[HttpPost]
public ActionResult Create(string zip, string make)
{
string url = "http://api.edmunds.com/v1/api/dealer?zipcode=" + zip.Replace(" ", "") + "&makeName=" + make.Replace(" ", "") + "&radius=3000&fmt=json&api_key=8rqtk3bb4bc4xgydqspvmc2s";
//WebRequest request = WebRequest.Create(url);
WebClient wc = new WebClient();
string stws = wc.DownloadString(url);
JToken root = JObject.Parse(stws);
JToken dealerholder = root["dealerHolder"];
DealerTentSaleMVC.Models.DealersTemp.DealerHolder convertedProducts = new DealerTentSaleMVC.Models.DealersTemp.DealerHolder();
string dh = dealerholder.ToString().Replace("[", "").Replace("]", "");
Result result = JsonConvert.DeserializeObject<Result>(stws);
foreach (var d in result.DealerHolder)
{
DealersTemp.DealerHolder newD = new DealersTemp.DealerHolder { active=d.active, contactinfo=d.contactinfo, address=d.address, id=d.id, locationId=d.locationId, logicalName=d.logicalName, make=d.make, name=d.name, operations=d.operations, publishDate=d.publishDate, syncPublishDate=d.syncPublishDate, type=d.type };
_repository.CreateDealer(d);
}
//DataContractJsonSerializer jsonSerializer =
// new DataContractJsonSerializer(typeof(DealersTemp.RootObject));
//DealersTemp.RootObject products = (DealersTemp.RootObject)jsonSerializer.ReadObject(ws.GetResponseStream());
//List<DealersTemp.DealerHolder> convertProducts = (DealersTemp.DealerHolder)products.dealerHolder;
return RedirectToAction("Index");
}
//
// GET: /Edmunds/Edit/5
public ActionResult Edit(int id)
{
DealersTemp.DealerHolder dealer = _repository.ReadDealer(id);
return View(dealer);
}
//
// POST: /Edmunds/Edit/5
[HttpPost]
public ActionResult Edit(DealerTentSaleMVC.Models.DealersTemp.DealerHolder dealerholder)
{
if (ModelState.IsValid)
{
_repository.UpdateDealer(dealerholder);
return RedirectToAction("Index");
}
return View(dealerholder);
}
//
// GET: /Edmunds/Delete/5
public ActionResult Delete(int id)
{
DealersTemp.DealerHolder dealer = _repository.ReadDealer(id);
return View(dealer);
}
//
// POST: /Edmunds/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
_repository.DeleteDealer(id);
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
}