我正在尝试发现数据库结构,以生成某种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; }
}
这是一个错误吗?如果是的话,有什么工作吗?
答案 0 :(得分:1)
如果要创建表格映射,此链接可能会有所帮助。我没有使用LINQ的POCO对象,因为我更喜欢为简单的事情创建我的域对象。这是一个可能有用的网址。我使用这个删除顺序,或者更确切地说是帮助清除一次数据库。