如何管理数据库中的外键插入

本文关键字:插入 数据库 何管理 管理 | 更新日期: 2023-09-27 17:58:24

我开发了一个小的对象解析器(用于SQL文件,使我能够轻松地找到过程中使用的所有表的列表),我有以下模型:

3张表:

  • 对象(ID、名称、LastWriteTime)
  • 表(ID,名称)
  • ObjectTable(ObjectID,TableID)

我有3个相应的类:

对象-扫描的文件列表:

[Table(Name = "object")]
public class SourceFile : IEquatable<SourceFile>
{
    public SourceFile()
    { }
    [Column(Name = "id", IsDbGenerated = true)]
    public Guid ID
    {
        get;
        set;
    }
    [Column(Name = "lastwritetime")]
    public DateTime LastWriteTimeUtc
    {
        get;
        set;
    }
    [Column(Name = "name", IsPrimaryKey = true)]
    public String Name
    {
        get;
        set;
    }
    public bool Equals(SourceFile other)
    {
        return Name == other.Name;
    }
    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

表-数据库中所有表的列表:

[Table(Name = "table")]
public class SourceTable : IEquatable<SourceTable>
{
    public SourceTable()
    { }
    [Column(Name = "id", IsDbGenerated = true)]
    public Guid ID
    {
        get;
        set;
    }
    [Column(Name = "name", IsPrimaryKey = true)]
    public String Name
    {
        get;
        set;
    }
    public bool Equals(SourceTable other)
    {
        return Name == other.Name;
    }
    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

ObjectTable-对于每个对象,使用的表列表:

[Table(Name = "object_table")]
public class SourceFileTable
{
    [Column(Name = "object_id", IsPrimaryKey = true)]
    public Guid ObjectID
    {
        get; set;
    }
    [Column(Name = "table_id", IsPrimaryKey = true)]
    public Guid TableID
    {
        get; set;
    }
}

正如你所看到的,对象的ID&表是DBGenerated的,所以我的问题是,如何使用生成的ID在ObjectTable中添加值?数据库中只插入了一次,之前没有。

有什么提示吗?

如何管理数据库中的外键插入

如果添加已创建的实体对象,Linq-to-sql将为您解决问题。只要你的外键在数据库中是可以的,这样的东西就会起作用:

using (db = new datacontext())
{ 
    var parent = new parent();
    var child = new child();
    parent.children.ad(child);
    db.parents.insertonsubmit(parent);
    db.submitchanges();
 }

因此,您不添加关键帧,而是添加对象。这对你们这样的协会也是一样的。

更新在你的情况下,它看起来像(记住,所以请检查拼写错误)

using (db = new datacontext())
{
var o = new Object();
var t = new Table();
db.objects.insertonsubmit(o);
db.tables.insertonsubmit(t);
var objecttable = new objecttable();
objecttable.object = o;
objeecttable.tbale = t;
db.objecttables.insertonsubmit(objecttable);
db.submitchanges();

}

或者你的问题是如何定义数据库中的外键?这是用这样一句话来完成的:

ALTER TABLE ORDERS 
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);