SMO DependencyWalker, проблема отношения многих ко многим - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь раскрыть структуру базы данных, сгенерировать какое-то POCO,

Я использовал этот фрагмент для обнаружения связанных таблиц,

var result = new ArrayList();
DependencyWalker w = new DependencyWalker(server);      
DependencyTree tree = w.DiscoverDependencies(new SqlSmoObject[]{tbl}, DependencyType.Children);
DependencyCollection depends = w.WalkDependencies(tree);

foreach (DependencyCollectionNode dcn in depends)
{
    //System.Windows.Forms.MessageBox.Show( tbl.Name + " -> " +  dcn.Urn.Parent);           
    if (dcn.Urn.Type == "Table" && dcn.Urn.GetNameForType("Table") != tbl.Name)
    {
        var tblName = dcn.Urn.GetNameForType("Table");
        result.Add(tblName);
    }
}

return result;

, это прекрасно работает для всехтаблица в базе данных, кроме тех, которые имеют Many-to-Many отношение

, например

Car

CarColor

Employee

CarOwnerHistory

в CarOwnerHistory, у меня есть отношение как к Car, так и к Employee,каждый Car имеет CarColor,

, хотя CarColor не имеет ничего общего с CarOwnerHistory, DependencyCollection для него получают ссылку на CarOwnerHistory

, этосгенерированный код

public class Car {
  public virtual IList<CarOwner> CarOwner { get; set; }
  public virtual CarColor CarColor { get; set; }
}

public class CarColor {  
  public virtual IList<CarOwner> CarOwner { get; set;}  //:( Why ???
  public virtual IList<Car> Car { get; set;}    
}

public class CarOwner {
  public virtual Car Car { get; set; }
  public virtual Employee Employee { get; set; }                                
}

это ошибка?если так, есть ли работа вокруг ??

1 Ответ

1 голос
/ 06 мая 2011

Эта ссылка может оказаться полезной, если вы создаете отображение таблиц. Я не использовал объекты POCO с LINQ, так как я предпочитаю создавать свои объекты в домене для простых вещей. Вот URL, который может быть полезен. Я использовал этот порядок для удаления или, скорее, помогал очистить базу данных один раз.

http://www.jasinskionline.com/technicalwiki/Default.aspx?Page=List-Tables-in-Dependency-Order-SQL-Server&NS=&AspxAutoDetectCookieSupport=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...