我得到以下代码:

public class SqlData : DataContext
{
    public Table<TextbausteinTyp> TextbausteinTypen;
    public SqlData(string connectionString) : base(connectionString)    {      }

    public void CreateDb()
    {
       CreateDatabase();
    }
}
[Table(Name = "tqTextbausteinTyp")]
public class TextbausteinTyp
{
    [Column(IsPrimaryKey = true, DbType = "BigInt IDENTITY NOT NULL", IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
    public int Id;
    [Column]
    public string Name;
}

[Table(Name = "tqTextbaustein")]
public class Textbaustein
{
    [Column(IsPrimaryKey = true, DbType = "BigInt IDENTITY NOT NULL", IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
    public int Id;
    [Column]
    public TextbausteinTyp IdBausteintyp;
    [Column]
    public string Inhalt;
    [Column]
    public string Name;
}


如您所见,这非常简单。执行CreateDatabase()时,出现以下错误:


  无法确定'tqOrder.data.TextbausteinTyp'的SQL类型


连接字符串导致由该代码创建的MSSQL数据库(但不包含表)

这是怎么了?

最佳答案

无法确定'tqOrder.data.TextbausteinTyp'的SQL类型


我并不感到惊讶,因为我也无法为其确定SQL类型。一个表如何成为另一个表中的列?

我想但不能肯定,您实际上想要的是:

[Column(CanBeNull=false,DbType="int not null")]
public int IdBausteintyp;


为了有一个引用IdBausteintyp列的外键列(我宁愿以“ id”结尾,而不是以它开头,但这是另一回事)。

您可以从该起点开始,然后添加:

private EntityRef<TextbausteinTyp> _textbausteinTyp;
[Association(Storage = "_textbausteinTyp", ThisKey = "IdBausteintyp")]
public TextbausteinTyp TextbausteinTyp
{
    get { return _textbausteinTyp.Entity; }
    set { _textbausteinTyp.Entity = value; }
}


然后,您具有一个TextbausteinTyp属性,该属性获取或设置与外键相关的TextbausteinTyp。 (请注意,如果您只想根据需要在查询中明确加入,则不必这样做)。

同样,您可以选择向TextbausteinTyp类添加:

private EntitySet<Textbaustein> _textbausteins;
[Association(Storage = "_textbausteins", OtherKey = "IdBausteintyp")]
public EntitySet<Textbaustein> Textbausteins
{
    get { return _textbausteins; }
    set { _textbausteins.Assign(value); }
}


以便将其另一端映射;与特定Textbaustein相关的TextbausteinTyp实体的集合。

10-07 22:44