2009-07-22 97 views
0

我正在使用sql server 2008,遵循最新约定我使用了除[dbo]。[tablename]之外的新模式,现在看起来像[newdbo]。[tablename]。现在的问题,SimpleRepository找不到[newdbo]。[tablename],我认为它正在寻找[dbo],而不是[newdbo],因为我的课程定义为:SubSonic 3.0.0.2/3 | SimpleRepository

这里是我的表:Schema/owner is “亲吻”

CREATE TABLE [kiss].[Users](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [UserName] [nvarchar](20) NOT NULL, 
    [UserPassword] [varbinary](128) NULL, 
    [UserTypeID] [tinyint] NOT NULL, 
    [ByPassAccessRestrictionsFlag] [bit] NOT NULL, 
    [IsEnforcePasswordPolicy] [bit] NOT NULL, 
    [PasswordExpirationDate] [datetime] NULL, 
    [IsPwdChangeNextLogin] [bit] NOT NULL, 
    [ShowLatestNewsFlag] [bit] NOT NULL, 
    [SortRowNumber] [int] NOT NULL, 
    [CreatedDate] [datetime] NOT NULL, 
    [CreatedBy] [nvarchar](20) NOT NULL, 
    [UpdatedDate] [datetime] NOT NULL, 
    [UpdatedBy] [nvarchar](20) NOT NULL, 
    [DeletedDate] [int] NULL, 
    [eCrewID] [varchar](10) NULL, 
    [EntityTypeID] [int] NOT NULL 
) 
GO 

,这里是我的课:

public class Users 
{ 
    public Int32 ID { get; set; } 
    public String UserName { get; set; } 
    public Byte[] UserPassword { get; set; } 
    public Byte UserTypeID { get; set; } 
    public Boolean ByPassAccessRestrictionsFlag { get; set; } 
    public Boolean IsEnforcePasswordPolicy { get; set; } 
    public DateTime PasswordExpirationDate { get; set; } 
    public Boolean IsPwdChangeNextLogin { get; set; } 
    public Boolean ShowLatestNewsFlag { get; set; } 
    public Int32 SortRowNumber { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public String CreatedBy { get; set; } 
    public DateTime UpdatedDate { get; set; } 
    public String UpdatedBy { get; set; } 
    public Int32 DeletedDate { get; set; } 
    public String eCrewID { get; set; } 
    public Int32 EntityTypeID { get; set; } 
} 

运行一个简单的代码:

var repo = new SimpleRepository("kiss", SimpleRepositoryOptions.None); 
    var users = repo.All<Users>(); 
    gvUsers.DataSource = users; 
    gvUsers.DataBind(); 

会产生一个错误:

System.Data.SqlClient.SqlException was unhandled by user code 
    Message="Invalid object name 'Users'." 
    Source=".Net SqlClient Data Provider" 
    ErrorCode=-2146232060 
    Class=16 
    LineNumber=1 
    Number=208 
    Procedure="" 
    Server="(local)\\SQLEXPRESS" 
    State=1 
    StackTrace: 
     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
     at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 
     at System.Data.SqlClient.SqlDataReader.get_MetaData() 
     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
     at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 
     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) 
     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
     at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
     at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
     at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
     at SubSonic.DataProviders.DbDataProvider.ExecuteReader(QueryCommand qry) 
     at SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand`1 query, Object[] paramValues) 
     at lambda_method(ExecutionScope) 
     at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) 
     at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) 
     at SubSonic.Linq.Structure.Query`1.System.Collections.IEnumerable.GetEnumerator() 
     at System.Web.UI.WebControls.PagedDataSource.GetEnumerator() 
     at System.Web.UI.WebControls.GridView.CreateAutoGeneratedColumns(PagedDataSource dataSource) 
     at System.Web.UI.WebControls.GridView.CreateColumns(PagedDataSource dataSource, Boolean useDataSource) 
     at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) 
     at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) 
     at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) 
     at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) 
     at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) 
     at System.Web.UI.WebControls.DataBoundControl.PerformSelect() 
     at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
     at System.Web.UI.WebControls.GridView.DataBind() 
     at web_subsonic._Default.Page_Load(Object sender, EventArgs e) in C:\scr\wcsf_playground\Modules\web_subsonic\web_subsonic\Default.aspx.cs:line 25 
     at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
     at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
     at System.Web.UI.Control.OnLoad(EventArgs e) 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 
+0

我试图重新命名[亲亲]模式/所有者。到[dbo]。和繁荣,正在工作。但我想要它[亲亲]。作为架构/所有者。 谢谢 – 2009-07-23 10:49:33

回答

1

什么是您的登录默认模式?不幸的是,你的对象无法知道你正在使用的模式 - 这是app ---> db记住,所以如果你有一个单独的模式,你应该使用默认使用该模式的登录。

+0

现在工作,我的用户默认架构是“dbo”。现在是扩展问题。我需要关联/连接/查询模式为“dbo”的对象。 “吻。”涉及“dbo”。 =( “我们正在混合新老&” – 2009-07-24 07:23:27

0

有两个选项

首先,获取最新的源代码,并修改代码烃源

  1. 找到SchemaAttributes.cs,添加代码:

    [AttributeUsage(AttributeTargets。类)] 公共类SubSonicTableSchemaAttribute:属性 {0}私有SubSonicTableSchemaAttribute(字符串架构) { Schema = schema; }

    public string Schema { get; set; } 
    

    }

  2. 绑定SubSonicTableSchemaAttribute到用户类

    [SubSonic.SqlGeneration.Schema.SubSonicTableSchema( “吻”)] 公共类用户{...}

  3. 查找Objects.cs文件,将代码添加到“公共静态ITable ToSchemaTable(此类型类型,IDataProvider提供程序)”方法

    var typeAttributes = type.GetCustomAttributes(); 的foreach(在typeAttributes VAR typeAtt) { 如果(typeAtt.ToString()等于( “SubSonic.SqlGeneration.Schema.SubSonicTableSchemaAttribute”)。) { VAR模式=(SubSonicTableSchemaAttribute)typeAtt; result.SchemaName = schema.Schema; }}

其次,看看我的演示: Use subsonic 3.0 SimpleRepository to a existing database

+0

感谢尼克, 我怎么能告诉SimpleReposity,并非所有我对我的实体属性将在更新,也不插入? 像场如“CreatedDate”,这是使用在我的表上定义GETDATE()作为默认值 如何推送SimpleRepository上的记录父/子关系的船,我需要父级自动生成的ID由子使用? – 2009-07-24 09:17:28

相关问题