【问题标题】:Error creating DataBase with Linq to SQL使用 Linq to SQL 创建数据库时出错
【发布时间】:2014-06-02 13:12:26
【问题描述】:

我尝试使用 LinQ 创建数据库结构。这些表相互引用。按照这里的提示,我目前有以下代码:(部分)

[Database]
public class SqlData : DataContext
{     
    public Table<Benutzer> Benutzers;      
    public Table<Standort> Standorts;

    public SqlData(string connectionString) : base(connectionString)   { }

    public void CreateDb()
    {            
        CreateDatabase();
    }
}

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

[Table(Name = "tqBenutzer")]
public class Benutzer
{
    [Column(IsPrimaryKey = true, DbType = "BigInt IDENTITY NOT NULL", IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
    public int Id;

    [Column(Name = "IdStandort")]
    private int? _idStandort;
    private EntityRef<Standort> _standort;

   [Association(Name = "FK_Benutzer_Standort", IsForeignKey = true, Storage = "_standort", ThisKey = "_idStandort")]
    public Standort IdStandort
    {
        get { return _standort.Entity; }
        set { _standort.Entity = value; }
    }
}

当 CreateDatabase() 被调用时,我收到以下错误:

部署步骤“激活功能”中发生错误:列 “tqStandort.Id”与引用列的数据类型不同 外键“FK_Benutzer_Standort”中的“tqBenutzer.IdStandort”。可以 不创建约束

我的错误在哪里?

(更新): 这将是我想要实现的 SQL 结构:

CREATE TABLE [dbo].[tqStandort](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_tqStandort] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[tqBenutzer](
    [Id] [int] NOT NULL,
    [IdStandort] [int] NULL,
 CONSTRAINT [PK_tqBenutzer] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[tqBenutzer]  WITH CHECK ADD  CONSTRAINT [FK_tqBenutzer_tqStandort] FOREIGN KEY([IdStandort])
REFERENCES [dbo].[tqStandort] ([Id])

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    您在关联中使用的列应该具有相同的类型。 改为:

    private long? _idStandort;
    

    或:

    [Table(Name = "tqStandort")]
    public class Standort
    {
        [Column(IsPrimaryKey = true, DbType = "Int IDENTITY NOT NULL", IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
        public int Id;
    
        ...
    }
    

    【讨论】:

    • 就在我发现自己的前一秒。 :) 是的。愚蠢的错误谢谢,伙计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多