如何使用Linq一对多映射到SQL

问题描述

| 我有一张桌子“ Article”
private int id;
    [ColumnAttribute(Storage = \"id\",AutoSync = AutoSync.OnInsert,DbType = \"Int NOT NULL IDENTITY\",IsPrimaryKey = true,IsDbGenerated = true)]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    private string title;
    [ColumnAttribute(Storage = \"title\",DbType = \"NVarChar(250) NOT NULL\",CanBeNull = false)]
    public string Title
    {
        get { return title; }
        set { title = value; }
    }

    private string description;
    [ColumnAttribute(Storage = \"description\",DbType = \"NVarChar(350) NOT NULL\",CanBeNull = false)]
    public string Description
    {
        get { return description; }
        set { description = value; }
    }
和表注释
 [Table(Name = \"dbo.Comments\")]
public class CommentDto
{
    private int id;
    [ColumnAttribute(Storage = \"id\",IsDbGenerated = true)]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    private string content;
    [ColumnAttribute(Storage = \"content\",DbType = \"NVarChar(600) NOT NULL\",CanBeNull = false)]
    public string Content
    {
        get { return content; }
        set { content = value; }
    }

    private string date;
    [ColumnAttribute(Storage = \"date\",DbType = \"DateTime NOT NULL\",CanBeNull = false)]
    public string Date
    {
        get { return date; }
        set { date = value; }
    }
}
一篇文章可以有很多评论,并且每个评论都可以由用户放置
[TableAttribute(Name = \"dbo.Users\")]
public class UserDto
{
    private int id;
    [ColumnAttribute(Storage = \"id\",IsDbGenerated = true)]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    private string username;
    [ColumnAttribute(Storage = \"username\",DbType = \"NVarChar(150) NOT NULL\",CanBeNull = false)]
    public string Username
    {
        get { return username; }
        set { username = value; }
    }
如何映射这些表之间的关系? 谢谢     

解决方法

        我认为您是手动创建表类。不需要这样做。 将LINQ to SQL(dbml)文件添加到解决方案中,打开“服务器资源管理器”窗口并连接到数据库, 将表拖放到dbml类的设计中。 如果表中有外键约束,则link将在两个类中创建各自的属性。 如果您想手动进行操作(我看不出原因), 使用引用的类的类型创建一个属性,这是所需的属性:
[Association(Name=\"your_fk_constraint_name\",Storage=\"name_of_your_private_backup_field\",ThisKey=\"name_of_the_key_in_this_table\",IsForeignKey=true)]
希望我能有所帮助     ,        您可以在此处阅读有关映射关联的信息。 在您的情况下:
class Article
{
    private EntitySet<CommentDto> _Comments;

    [Association(OtherKey = \"ArticleID\")]
    public virtual IList<CommentDto> Comments
    {
            get
            {
                if (_Comments == null)
                    _Comments = new EntitySet<CommentDto>();
                return _Comments;
            }
            set
            {
                Comments.Assign(value);
            }
    }
}

class Comment
{
    [Association(ThisKey=\"ArticleID\")]
    public ArticleDto Article { get; set; }
}
当然,您应该首先将ArticleID列添加到数据库的Comments表中。 上面的链接未在MSDN代码中提供以下部分,但是没有它,我在WCF服务中的DTO上遇到了很多问题。因此,现在我更喜欢将其添加到每个关联中:
if (_Comments == null)
    _Comments = new EntitySet<CommentDto>();
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...