2017-10-12 138 views
1

我有一个提交页面,其中一个窗体的字段是纬度/经度坐标。我将它们存储在一个名为“位置” System.Data.Entity.Spatial.DbGeography,并渲染领域是这样的:System.Data.Entity.Spatial.DbGeography - 没有无参数构造函数

<div class="form-group"> 
      @Html.LabelFor(model => model.Location.Longitude, new { @class = "control-label col-md-2" }) 
      <div class="col-sm-3"> 
       @Html.TextBoxFor(model => model.Location.Longitude) 
       <img class="load-icon" src="~/Content/Loading.gif" /> 
       @Html.ValidationMessageFor(model => model.Location.Longitude) 
      </div> 

      @Html.LabelFor(model => model.Location.Latitude, new { @class = "control-label col-md-2" }) 
      <div class="col-sm-3"> 
       @Html.TextBoxFor(model => model.Location.Latitude) 
       <img class="load-icon" src="~/Content/Loading.gif" /> 
       @Html.ValidationMessageFor(model => model.Location.Latitude) 
      </div> 
     </div> 

在我的控制,我收到对方形式:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "...Location...")] Report report) 

但是每次我用表单中的值POST时都会抛出一个异常,说明某个对象(它告诉我哪个对象)没有参数少的构造函数。当我从绑定字符串中删除“位置”,但保留所有其他属性(在我的示例中省略),它工作正常。

这似乎表明问题在于它试图创建一个DbGeography来放入“报告”,但由于无法实例化而失败。它是否正确?如果是这样,我该如何避免这个错误?我宁愿不在数据库中使用自定义类,但我想不出任何其他选项。

+0

拥有DBGeography默认构造函数? – Zinov

+0

它不是没有参数的公共构造函数 –

+0

所以,如果这不是公共构造函数,那么你的期望 - 这是你的答案 –

回答

0

它使用sqlQueryCommand 这个代码100%的最佳方式工作:

var id = form["id"]; 
      var name = form["name"]; 
      var lat = form["Location.Latitude"]; 
      var lng = form["Location.Longitude"]; 
      db.Database.ExecuteSqlCommand("insert into [dbo].[schoolinfo] values ('" + id + "','" + name + "',geography::Point(" + lat + ", " + lng + ", 4326))"); 
+0

不,这根本不安全,不这样做。 – JOSEFtw

+0

为什么不呢? @JOSEFtw –

+0

我有问题绑定dbGeography,所以我选择formcollection和sqCommand –