Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Dlinq -> SQL база


Автор: nspace 16.2.2007, 09:18
Есть DlinqObject сделанный в дизайнере, перетаскиванием с ServerExplorer-а
в table1, допустим, 3 колонки: a, b, Id - primary key
Как сделать что-бы Id автоматически генерировался, и его можно было взять и записать в связанные таблицы
Код

elm.a = "dfgre";
elm.b = "fwef";
//elm.Id ???
dataContext.table1.Add(elm);
dataContext.SubmitChanges();

Автор: Exception 19.2.2007, 20:03
Цитата(nspace @  16.2.2007,  10:18 Найти цитируемый пост)
Как сделать что-бы Id автоматически генерировался


Это ж в самой базе делается обычно?..

Автор: namespace 19.2.2007, 21:44
Да я думал может в Dlinq фишки такие есть. smile 
Еще вопросик: установил я в базе автогенератор, инкремент,
а вот как-бы через DlinqObject, минимальными затратами, этот ключик получить для добавления в связанную таблицу smile 
спасибо

Автор: Idsa 19.2.2007, 22:08
У тебя есть поле с autoincrement=true. И в чем проблема при выборке записей считать и это поле?

Автор: namespace 27.2.2007, 20:41
Есть DlinqObject сделанный в дизайнере, перетаскиванием с ServerExplorer-а
в table1, допустим, 3 колонки: a, b, Id - primary key
Как сделать что-бы Id автоматически генерировался, и его можно было взять и записать в связанные таблицы
Код

elm.a = "dfgre";
elm.b = "fwef";
//elm.Id ???
dataContext.table1.Add(elm);
dataContext.SubmitChanges();

да генерация ключа это в базе, самое главное в дизайнере DlinkObjects тоже установить что поле идентификатор и автогенерируется, а вот со связанной таблицей в Dlink проще пареной репы оказалось
предположим в табличке elm значение elm.mainId должно быть как в таблице par (экземпляр parent) par.mainId,
то в дизайнере DlinkObjects надо установить связь между указанными полями и тогда можно писать:
Код


elm.a = "dfgre";
elm.b = "fwef";
elm.parent = par; 
dataContext.table1.Add(par);
dataContext.table1.Add(elm);
dataContext.SubmitChanges();

и все Ж)

и кстати не подскажите можно ли без датасетов и ридеров сделать из таблицы длинка бинд на комбобох?

Автор: namespace 1.3.2007, 22:38
есть две таблицы family и children с отношением family.familyIN - primary key, children.familyIN - foreign key
Код

            var removeF =
                from rem in dc.families
                where rem.familyIN == 18
                select rem;

            dc.families.RemoveAll(removeF);
            dc.SubmitChanges();

так вот из основной таблицы удаление записи проходит нормально
Код

            var removeC =
                from rem in dc.childrens
                where rem.familyIN == 10
                select rem;
                
            dc.childrens.RemoveAll(removeC);
            dc.SubmitChanges();

а из children выдает исключение Object reference not set to an instance of an object. на вот этот код:
Код

[System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.Data.DLinq.Association(Name="FK_familyIN", Storage="_family", ThisKey="familyIN", IsParent=true)]
        public family family {
            get {
                return this._family.Entity;
            }
            set {
                if ((this._family.Entity != value)) {
                    this.OnPropertyChanging("family");
                    if ((this._family.Entity != null)) {
                        this._family.Entity = null;
=>                    this._family.Entity.FK_familyIN.Remove(this);
                    }
                    this._family.Entity = value;
                    if ((value != null)) {
                        value.FK_familyIN.Add(this);
                    }
                    this.OnPropertyChanged("family");
                }
            }
        }

Автор: mr.DUDA 2.3.2007, 10:51
foreign key есть, а вот есть ли DataRelation ?

Автор: Exception 2.3.2007, 19:03
Цитата(namespace @  1.3.2007,  23:38 Найти цитируемый пост)
а из children выдает исключение Object reference not set to an instance of an object. на вот этот код:


Так посмотри в дебуге, на какой объект указывает исключение.
Так делать выводы не очень-то легко.

Автор: namespace 14.3.2007, 19:40
Код

                   if ((this._family.Entity != null)) {
                       this._family.Entity = null;   :))))))))))))
                        this._family.Entity.FK_familyIN.Remove(this);
                   }

Глючная студия smile , она явно что-то сгенерировала лишнее  smile 
так что все работает.

А насчет не использования датариедеров и датасетов, вот пример как загнать в комбобокс:
Код

            //steets таблица с улицами ID (int) - идентификатор, name (string) - название
            comboBox1.DataSource = dc.streets.ToList();
            comboBox1.DisplayMember = "name";//поле которое будет видно в комбобоксе
            comboBox1.ValueMember = "ID";//поле являющееся значением 
            //теперь достаточно обратитьтся к свойству SelectedValue
            //которое содержит значение соответствующее выбранному элементу
            //привести его к нужному типу,т.к. оно содержит тип object
            //Convert.ToInt32(comboBox1.SelectedValue);

кстати можно и резултат запроса загнать короче IEnumerable

Dlink классная штука, скорей бы релиз вышел

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)