Активная запись - HasAndBelongsToMany не работает - PullRequest
1 голос
/ 20 марта 2011

У меня есть 3 таблицы в базе данных SQL Server.

Я использую Active Record для .NET, и у меня возникла проблема с тем, что данные в таблице UserAttachment не сохраняются при создании нового пользователя, включая вложение.Это дает мне следующее исключение: "Невозможно вставить значение NULL в столбец 'UserID', таблица 'UsersDB.dbo.UsersAttachments'; столбец не допускает нулевые значения. INSERT завершается ошибкой." Оператор завершен.

Я предполагаю, что предполагается, что UserID заполняется автоматически, поскольку этот столбец является PrimaryKey с сгенерированным номером AutoIncrement.

В таблице User данные сохраняются, но не в UserAttachments

Пожалуйста, смотрите имя таблицы после имен столбцов.

Пользователь -UserID -Name -LastName

UserAttachments -UserAttachmentID -UserID -AttachmentTypeID-Name -FilenamePath

AttachmentType -AttachmentTypeID -TypeName

    [PrimaryKey(PrimaryKeyType.Native, "UserID")]
    public int UserID{ get; set; }
    [Property(NotNull = false)]
    public string Name { get; set; }
    [Property(NotNull = false)]
    public string LastName{ get; set; }


    [HasAndBelongsToMany(
        typeof(Attachments.Attachments),
        Table = "UserAttachments",
        ColumnKey = "UserAttachmentID",
        ColumnRef = "UserID",
        Cascade=ManyRelationCascadeEnum.All,
        Inverse = true,
        )
    ]
    public IList<Users.Attachments> UserAttachments  { get; set; }

У вас есть представление о том, что я делаю неправильно?

Дэвид

1 Ответ

1 голос
/ 22 марта 2011

Первое, что я могу заметить, это то, что у вас ColumnRef и ColumnKey неправильные пути.

ColumnKey - это имя столбца, в котором хранится идентификатор объекта, из которого вы отображаете.В этом случае пользователь.Поэтому ColumnKey должен быть установлен в «UserId»

ColumnRef - это идентификатор, который ссылается на объект, который вы отображаете.Поэтому ColumnRef должен быть установлен в «UserAttachmentId»

Другая проблема, которую я могу заметить, заключается в том, что тип, указанный в атрибуте, должен быть типом объекта в коллекции.Ваша коллекция содержит Users.Attachments, но вы указали typeof(Attachments.Attachments)

Наконец, ваш Inverse=true говорит, что ваши вложения "владеют" пользователями.Я не знаю ваше приложение, но это кажется нелогичным.

Что касается того, какая из перечисленных проблем является причиной вашей проблемы, я не совсем уверен.

Дополнительная документация здесь http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/hasandbelongs.html

...