我在SQL Server数据库中有3个表。
我正在使用Active Record for .NET,我遇到的问题是,当我创建包含附件的新用户时,UserAttachment表中的数据未被保存。它给了我以下异常:“无法将值NULL插入列'UserID',表'UsersDB.dbo.UsersAttachments';列不允许空值.INSERT失败。” 声明已经终止。
我假设UserID假设正在自动填充,因为该列是生成AutoIncrement编号的PrimaryKey。
在用户表中,数据已保存,但未保存在UserAttachments
中请参阅列名后的表名。
用户 -用户身份 -名称 -LastName
UserAttachments -UserAttachmentID -用户身份 -AttachmentTypeID -名称 -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; }
你知道我做错了什么吗?
大卫
答案 0 :(得分:1)
我能发现的第一件事是你有ColumnRef和ColumnKey是错误的方法。
ColumnKey是存储要映射的对象的ID的列的名称。在这种情况下,用户。所以ColumnKey应该设置为“UserId”
ColumnRef是引用您要映射到的东西的ID。因此ColumnRef应设置为“UserAttachmentId”
我可以发现的另一个问题是属性中指定的类型应该是集合中对象的类型。您的收藏集包含Users.Attachments
,但您已指定typeof(Attachments.Attachments)
最后,您的Inverse=true
表示您的附件“拥有”用户。我不知道你的应用程序,但这似乎违反直觉。
至于上述哪个问题导致您的问题,我不完全确定。
这里有一些进一步的文档 http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/hasandbelongs.html