Использование Linq, общего сопоставления, C #, React, Visual Studio 2015, SQL Server Management Studio. Я новичок в Linq (его использование на этом сайте), обобщенном отображении и React.
TLDR: невозможно определить, где / когда заполняется объект, связанный с таблицей SQL Server
Я создаю веб-сайт (унаследованный код), где пользователи вводят значения для адресов (адрес (улица), город, штат, почтовый индекс, округ) и данные отправляются в таблицу SQL Server. Все значения переменных правильно помещаются в таблицу SQL Server, кроме адреса.
Я подробно рассмотрел код и не могу понять, почему он не работает; то есть. все они должны работать или все не работать. Я попытался жестко запрограммировать значение адреса (улицы), но оно все равно не отправляется на SQL Server. Я не могу понять, где значение передается из веб-формы в переменную адреса (улицы).
Вот код, включая addressid + city в качестве ссылки (оба правильно отправлены на SQL Server). Я добавил комментарии о том, как мое понимание того, как работает процесс.
Загрузка внешних переменных для загрузки переменных (все переменные заполняются, как и ожидалось, при вводе пользователем):
var OrdersCreateByAddressTab = React.createClass({
getInitialState: function() {
return {
address: "",
city: "",
county: "",
intersection: "",
isSearched: false,
latitude: "",
longitude: "",
saveEnabled: false,
state: "",
states: [],
zip: ""
}
},
handleClickNext: function() {
if(this.state.isSearched && this.props.onNext) {
var address = {
address: this.state.address,
city: this.state.city,
county: this.state.county,
country: "USA",
intersection: this.state.intersection,
state: this.state.state,
zip: this.state.zip
};
this.props.onNext(address);
}
},
Эта часть также влияет на загрузку веб-сайта для заполнения веб-таблицы для существующих свойств
[global::System.Data.Linq.Mapping.TableAttribute(Name="appl.Address")]
public partial class Address : INotifyPropertyChanging, INotifyPropertyChanged
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private int _addressId;
private string _address1;
private string _city;
private EntitySet<UserTargetProperty> _UserTargetProperties;
private EntitySet<Customer> _Customers;
private EntitySet<Customer> _Customers1;
private EntitySet<OrderProperty> _OrderProperties;
#region Extensibility Method Definitions
partial void OnLoaded();
partial void OnValidate(System.Data.Linq.ChangeAction action);
partial void OnCreated();
partial void OnaddressIdChanging(int value);
partial void OnaddressIdChanged();
partial void Onaddress1Changing(string value);
partial void Onaddress1Changed();
partial void OncityChanging(string value);
partial void OncityChanged();
#endregion
public Address()
{
this._UserTargetProperties = new EntitySet<UserTargetProperty>(new Action<UserTargetProperty>(this.attach_UserTargetProperties), new Action<UserTargetProperty>(this.detach_UserTargetProperties));
this._Customers = new EntitySet<Customer>(new Action<Customer>(this.attach_Customers), new Action<Customer>(this.detach_Customers));
this._Customers1 = new EntitySet<Customer>(new Action<Customer>(this.attach_Customers1), new Action<Customer>(this.detach_Customers1));
this._OrderProperties = new EntitySet<OrderProperty>(new Action<OrderProperty>(this.attach_OrderProperties), new Action<OrderProperty>(this.detach_OrderProperties));
OnCreated();
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_addressId", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int addressId
{
get
{
return this._addressId;
}
set
{
if ((this._addressId != value))
{
this.OnaddressIdChanging(value);
this.SendPropertyChanging();
this._addressId = value;
this.SendPropertyChanged("addressId");
this.OnaddressIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Name = "address", Storage = "_address1", DbType = "VarChar(255)")]
public string address1
{
get
{
return this._address1;
}
set
{
if ((this._address1 != value))
{
this.Onaddress1Changing(value);
this.SendPropertyChanging();
this._address1 = value;
this.SendPropertyChanged("address1");
this.Onaddress1Changed();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_city", DbType="VarChar(128)")]
public string city
{
get
{
return this._city;
}
set
{
if ((this._city != value))
{
this.OncityChanging(value);
this.SendPropertyChanging();
this._city = value;
this.SendPropertyChanged("city");
this.OncityChanged();
}
}
}
Метод UserTargetProperty запускается для получения всей информации об адресе для окончательного размещения в значениях sqltable Linq
public static UserTargetProperty ToUserTargetProperty(UserTargetPropertyModel property, int customerId)
{
UserTargetProperty output = null;
Address address = null;
address = ToAddress(property);
output = genericMapping<UserTargetProperty>(property, null, true);
output.addressId = null;
output.customerId = customerId;
output.geometry = XElement.Parse(property.Geometry);
output.Address = address;
return output;
}
Эти методы запускаются для заполнения метода Address и существующей переменной значениями из существующих значений адреса, введенных пользователем.
public static UserTargetPropertyModel ToUserTargetPropertyModel(Address address, UserTargetPropertyModel existing)
{
UserTargetPropertyModel output = null;
output = genericMapping<UserTargetPropertyModel>(address, existing, true);
output.Address = address.address1;
return output;
}
public static UserTargetPropertyModel ToUserTargetPropertyModel(UserTargetProperty userTargetProperty, ParseGeometryModel parseGeometry)
{
UserTargetPropertyModel output = null;
output = genericMapping<UserTargetPropertyModel>(userTargetProperty, null, true);
output = ToUserTargetPropertyModel(userTargetProperty.Address, output);
output.Points = parseGeometry.Points;
return output;
}
Метод Address ToAddress запускает связанное свойство с addressId для заполнения в UserTargetProperty
public static Address ToAddress(Address address)
{
Address output = null;
output = genericMapping<Address>(address, null, false);
output.addressId = 0;
return output;
}
GenericMapping запускается, чтобы определить, существует ли свойство и как действовать. 'data' уже заполнен информацией об адресе свойства из предыдущего кода.
private static T genericMapping<T>(object data, T existingObject, bool ignoreCase)
{
if (existingObject == null)
{ existingObject = Activator.CreateInstance<T>(); }
if (ignoreCase)
{ existingObject.InjectFrom<IgnoreCaseInjecter>(data); }
else
{ existingObject.InjectFrom(data); }
return existingObject;
}