Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 FK -> Relations  [new]
Ex_Soft
Member

Откуда:
Сообщений: 7712
А что разве создание FK автоматом не модифицирует Relations?
public class MyDS: DataSet
{
   Tables.Add("TestTable");
   Tables["TestTable"].Columns.Add("Id",typeof(int));
   Tables["TestTable"].Columns.Add("Name",typeof(string));
   Tables["TestTable"].PrimaryKey=new DataColumn[]{Tables["TestTable"].Columns["Id"]};

   Tables.Add("TestTableDetail");
   Tables["TestTableDetail"].Columns.Add("Id",typeof(int));
   Tables["TestTableDetail"].Columns.Add("SubId",typeof(int));
   Tables["TestTableDetail"].PrimaryKey=new DataColumn[]{Tables["TestTableDetail"].Columns["Id"],Tables["TestTableDetail"].Columns["SubId"]};

   ForeignKeyConstraint
     fk=new ForeignKeyConstraint("fk_Master_Detail",Tables["TestTable"].Columns["Id"],Tables["TestTableDetail"].Columns["Id"]);

   fk.DeleteRule=Rule.Cascade;
   fk.UpdateRule=Rule.Cascade;
   Tables["TestTableDetail"].Constraints.Add(fk);
   Tables["TestTableDetail"].Columns.Add("Name",typeof(short),"Parent(fk_Master_Detail).Name");
}
получаю
Object reference not set to an instance of an object.

нужно еще добавить
...
DataRelation
  rel=new new DataRelation("fk_Master_Detail",Tables["TestTable"].Columns["Id"],Tables["TestTableDetail"].Columns["Id"]);

Relations.Add(rel);
Tables["TestTableDetail"].Columns.Add("Name",typeof(short),"Parent(fk_Master_Detail).Name");
Тогда работает, но, IMHO, это уже масло масленое получается... По большому счету весь сыр бор с FK только из-за установки cascade. Потому как быстро и красиво посредством Tables["TestTableDetail"].Constraints к полученному при Relations.Add() FK хрен достучишЪся. Или я где-то чего-то недопонял/пропустил?
_________________
"Helo, word!" - 17 errors 56 warnings
16 янв 06, 18:38    [2259628]     Ответить | Цитировать Сообщить модератору
 Re: FK -> Relations  [new]
Ex_Soft
Member

Откуда:
Сообщений: 7712
Порулить правилами каскадирования оказалось просто:
(Tables["TestTableDetail"].Constraints.["fk_Master_Detail"] as System.Data.ForeignKeyConstraint).DeleteRule=Rule.Cascade;
_________________
"Helo, word!" - 17 errors 56 warnings
16 янв 06, 21:46    [2259942]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить