Использование Linq и общего сопоставления для пользовательского значения WebForm в таблице SQL Server, но столбец заполнен только NULL - PullRequest
0 голосов
/ 19 марта 2019

Использование 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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...