Linq to Sql - FK не генерируется при создании базы данных - PullRequest
1 голос
/ 28 марта 2011

Может ли кто-нибудь помочь мне с тем, что внешний ключ между таблицей Track и таблицей TrackArtist не создается при использовании функции DataContext.CreateDatabase () для создания моей базы данных на основена моих лицах?Мои таблицы / столбцы генерируются нормально, но мои отношения не генерируются как ограничение FK.

Я пытаюсь создать FK между таблицами, чтобы таблица TrackArtist могла быть таблицей поиска дляТрек стол.

[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; }
    }

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Так же, как свойство IsPrimaryKey ColumnAttribute имеет значение true для вашего свойства Id, свойство IsForeignKey ColumnAttribute должно быть истинным для свойства TrackArtist.

См. Документацию MSDN для ColumnAttribute.IsForeignKey здесь: http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.associationattribute.isforeignkey.aspx

0 голосов
/ 28 марта 2011

Это, вероятно, не то, что вы ищете, но стоит упомянуть. Соглашение об именах для полей таблицы ключей. Я бы рекомендовал использовать TableNameId в качестве имени первичного ключа. TrackId, TrackArtistId. Такое соглашение об именах также должно помочь вам найти опечатки, которые не так редко делают загадочные ошибки. Кроме того, в этом случае «Id» вы обычно избегаете конфликтов с внутренними и защищенными ключевыми словами.

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