我得到以下代码:
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
实体的集合。