DataContext连接到数据库,但表引用为null。为什么?

时间:2018-06-17 08:48:16

标签: c# sql sql-server linq azure-sql-database

我创建了一个数据上下文类:

public class DBContextZProdDomainSS : DataContext
{
        public Table<ZTask> ZTasks { get; set; }
        public Table<ZProject> ZProjects { get; set; }
        public Table<ZUser> ZUsers { get; set; }

        public DBContextZProdDomainSS() : base(ConfigurationManager.ConnectionStrings["ZProdDomainSS"].ConnectionString) { }
}

在实例化时,它成功连接到数据库:

public static IEnumerable<ZTask> ZTaskRead()
{
    using (var context = new DBContextZProdDomainSS())
    {
        if (context.DatabaseExists())
        {
            Console.WriteLine("Found database");
        }

        return context.ZTasks.ToList();
    }
}

无论出于何种原因,方法context.DatabaseExists()都会返回true,但是当我单步执行并检查连接的值时,它会关闭。此外,即使表示数据库存在,所有表引用都为null。

以下是我的连接字符串示例(删除了敏感信息):

Server=tcp:zproductivity.database.windows.net,1433;
     Initial Catalog=ZProdDomainSS;Persist Security Info=False;
     User ID=MYUSERNAME;Password=MYPASSWORD;MultipleActiveResultSets=False;
     Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

但无论出于何种原因,表引用都是null。为什么会这样?我已经浏览了每个模型类并将它们映射为:

    [Table(Name = "ZTasks")]
    public class ZTask : ModelBase
    {
        #region props
        [Column(Name = "ZID", IsPrimaryKey = true, IsDbGenerated = true)]
        public long ZID { get; set; }
        [Column(Name = "UtcCreatedDateTime", IsDbGenerated = true)]
        public DateTime UtcCreatedDateTime { get; set; }
        [Column(Name = "Title", CanBeNull = true)]
        public string Title { get; set; }
        [Column(Name = "ZUserZID", CanBeNull = false)]
        public long ZUserZID { get; set; }
        [Column(Name = "Description", CanBeNull = true)]
        public string Description { get; set; }
        [Column(Name = "ZProjectZID", CanBeNull =true)]
        public long? ZProjectZID { get; set; }
        [Column(Name = "ZParentTaskZID", CanBeNull = true)]
        public long? ZParentTaskZID { get; set; }
        [Column(Name = "UtcDueDate", CanBeNull = true)]
        public DateTime? UtcDueDate { get; set; }
        [Column(Name = "UtcCompletionDateTime", CanBeNull = true)]
        public DateTime? UtcCompletionDateTime { get; set; }
        [Column(Name = "Completed", CanBeNull = false)]
        public bool Completed { get; set; }
    }

ZProjects和ZUsers都以相同的方式映射。这是ZTasks的数据库模式:

CREATE TABLE [dbo].[ZTasks] 
(
    [ZID]                   BIGINT         IDENTITY (100000000, 1) NOT NULL,
    [Title]                 NVARCHAR (MAX) NULL,
    [ZUserZID]              BIGINT         NOT NULL,
    [Description]           NVARCHAR (MAX) NULL,
    [ZProjectZID]           BIGINT         NULL,
    [UtcDueDate]            DATETIME       DEFAULT (NULL) NULL,
    [UtcCompletionDateTime] DATETIME       DEFAULT (NULL) NULL,
    [Completed]             BIT            DEFAULT ((0)) NOT NULL,
    [UtcCreatedDateTime]    DATETIME       DEFAULT (sysutcdatetime()) NOT NULL,
    [ZParentTaskZID]        BIGINT         NULL,
    CONSTRAINT [PK_dbo.ZTasks] PRIMARY KEY CLUSTERED ([ZID] ASC)
);

为什么表引用null?我该如何解决这个问题?

0 个答案:

没有答案