在使用DataContext.CreateDatabase()函数创建我的表时,是否可以帮助我了解表 Track 和table TrackArtist 之间的外键的原因数据库基于我的实体?我的表/列生成正常,但我的关系不是作为FK约束生成的。
我正在尝试在表之间创建一个FK,以便TrackArtist表可以成为Track表的“查找”表。
[Table(Name="Track")]
public class Track
{
[Column (IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
public int Id { get; set; }
[Column]
private int TrackArtistId {get; set;}
private EntityRef<TrackArtist> _trackArtist;
[Association(Name="FK_Track_TrackArtist", ThisKey = "TrackArtistId", OtherKey="Id", Storage = "_trackArtist")]
public TrackArtist TrackArtist
{
get { return this._trackArtist.Entity; }
set { this._trackArtist.Entity = value;
TrackArtistId = value.Id;
}
}
[Column (CanBeNull=false)]
public string Description { get; set; }
}
[Table(Name="TrackArtist")]
public class TrackArtist
{
[Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
internal int Id { get; set; }
[Column (CanBeNull=false)]
public string Name { get; set; }
}
答案 0 :(得分:0)
这可能不是你想要的,但值得一提。表键字段的命名约定。我建议使用TableNameId作为主键名。 TrackId,TrackArtistId。这样的命名约定也应该可以帮助你找到拼写错误,而这些拼写错误很少会产生神秘错误。此外,在“Id”的情况下,您通常会避免与内部和受保护关键字发生冲突。
答案 1 :(得分:0)
就像您的Id属性上ColumnAttribute的IsPrimaryKey属性为true一样,ColumnAttribute的IsForeignKey属性在您的TrackArtist属性上必须为true。
请在此处查看ColumnAttribute.IsForeignKey的MSDN文档:http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.associationattribute.isforeignkey.aspx