SubSonic 3.0.0.2/3 | SimpleRepository

Я использую sql server 2008, чтобы следовать последнему соглашению, я использовал новую схему, отличную от [dbo]. [Tablename], которая теперь выглядит как [newdbo]. [Tablename]. Проблема в том, что SimpleRepository не может найти [newdbo]. [Tablename], я предположил, что он ищет [dbo], а не [newdbo], поскольку мой класс определен как:

вот моя таблица: схема / владелец "поцелуй"

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: 

person No Body    schedule 22.07.2009    source источник
comment
Пытаюсь переименовать схему / владельца из [поцелуй]. к [dbo]. и бум, работает. но я хочу, чтобы это было [поцелуй]. как схема / владелец. Благодарность   -  person No Body    schedule 23.07.2009


Ответы (2)


Какая схема используется по умолчанию для вашего входа в систему? К сожалению, ваш объект никак не узнает, с какой схемой вы работаете - это app ---> db, помните, поэтому, если у вас есть отдельная схема, вы должны использовать логин, который использует эту схему по умолчанию.

person Community    schedule 24.07.2009
comment
Теперь он работает, моя пользовательская схема по умолчанию - dbo. теперь расширенная проблема. Мне нужно связать / подключиться / запросить объект, в котором используется схема dbo. целовать. относятся к dbo. = (мы смешиваем старое и новое - person No Body; 24.07.2009

Есть два варианта

Сначала получите последний исходный код и измените исходный код.

  1. Найдите SchemaAttributes.cs, добавьте код:

    [AttributeUsage (AttributeTargets.Class)] открытый класс SubSonicTableSchemaAttribute: Атрибут {общедоступный 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 (var typeAtt в typeAttributes) {if (typeAtt.ToString (). Equals ("SubSonic.SqlGeneration.Schema.SubSonicTableSchemaAttribute")) {var schema = (SubSonicTableSchemaAttribute) typeAtt; result.SchemaName = schema.Schema; }}

Во-вторых, взгляните на мою демонстрацию: Использовать subsonic 3.0 SimpleRepository в существующей базе данных < / а>

person NEE    schedule 24.07.2009
comment
Спасибо, Ник, как я могу сказать SimpleReposity, что не все мои свойства в моей сущности будут использоваться при обновлении или вставке? как поле, такое как CreatedDate, которое определено в моей таблице с GETDATE () в качестве значения по умолчанию. И как можно протолкнуть записи в связке SimpleRepository Parent / Child, где мне нужен родительский автоматически сгенерированный идентификатор, который будет использоваться дочерним элементом? - person No Body; 24.07.2009
comment
как можно нажимать записи в связке SimpleRepository Parent / Child, где мне нужен родительский автоматически сгенерированный идентификатор, который будет использоваться дочерним элементом? - person No Body; 25.07.2009
comment
Я бы отправил свой ответ по этой ссылке: subsonicproject.com/docs/Can_SubSonic_Scale - person No Body; 28.07.2009