2009-07-22 42 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

相關問題