2009-07-22 5 views
0

J'utilise sql server 2008, pour suivre la dernière convention, j'ai utilisé un nouveau schéma autre que [dbo]. [Tablename] qui ressemble maintenant à ceci [newdbo]. [Tablename]. Le problème maintenant, SimpleRepository n'a pas pu localiser [newdbo]. [Tablename], j'ai supposé qu'il cherche [dbo] plutôt que [newdbo], puisque ma classe est définie comme:SubSonic 3.0.0.2/3 | SimpleRepository

voici ma table: Schema/owner is "baiser"

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 

et voici ma classe:

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; } 
} 

l'exécution d'un code simple:

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

générer une erreur:

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

J'essaie de renommer le schéma/propriétaire de [baiser]. à [dbo]. et boom, travaille. mais je veux que ce soit [bisou]. comme le schéma/propriétaire. merci –

Répondre

1

Quel est le schéma par défaut pour votre connexion? Malheureusement, votre objet ne saura jamais quel schéma vous travaillez - c'est l'application ---> db n'oubliez pas, donc si vous avez un schéma séparé, vous devez utiliser un login qui utilise ce schéma par défaut.

+0

son fonctionnement maintenant, mon schéma par défaut de l'utilisateur est "dbo". maintenant le problème étendu. J'ai besoin de relier/connecter/interroger un objet où le schéma est "dbo". "baiser." se rapportent à "dbo". = ( « nous mélangeons vieux et nouveau » –

0

Il y a deux options

D'abord, obtenir le dernier code source, et modifier le code souce

  1. Trouvez les SchemaAttributes.cs, ajoutez le code:

    [AttributeUsage (AttributeTargets. Classe)] public class SubSonicTableSchemaAttribute: Attribut { public SubSonicTableSchemaAttribute (schéma de chaîne) { Schéma = schéma; }

    public string Schema { get; set; } 
    

    }

  2. Liez le SubSonicTableSchemaAttribute à la classe utilisateur

    [SubSonic.SqlGeneration.Schema.SubSonicTableSchema ("baiser")] public class utilisateur {...}

  3. Recherchez le fichier Objects.cs, ajoutez du code au "public static ITable ToSchemaTable (ce type de type, fournisseur IDataProvider)" Méthode

    var typeAttributes = type.GetCustomAttributes(); foreach (var typeAtt dans typeAttributes) {if ((typeAtt.ToString) est égal à ("SubSonic.SqlGeneration.Schema.SubSonicTableSchemaAttribute").) { schéma var = (SubSonicTableSchemaAttribute) typeAtt; résultat.SchemaName = schéma.Schéma; }}

En second lieu, un coup d'oeil à ma démo: Use subsonic 3.0 SimpleRepository to a existing database

+0

Merci Nick, comment puis-je dire SimpleReposity que pas toutes mes propriétés sur mon entité sera utilisé dans la mise à jour, ni l'insertion ? Comme champ tels que « CreatedDate » qui est définir sur ma table avec GETDATE() comme valeur par défaut Et comment faire pour pousser les enregistrements sur la relation parent/enfant de SimpleRepository, où j'ai besoin d'un ID généré automatiquement par un parent pour être utilisé par l'enfant? –

+0

Les valeurs par défaut ne fonctionneront pas sur les insertions parce que votre objet va définir la valeur en premier.Vous devriez voir le lien ci-dessous: http://stackoverflow.com/questions/1171025/subsonic-3-0-the-sqlserver-default-value-doesnt-work – NEE

+0

comment peut pousser enregistrements sur SimpleRepo sitory Relation parents/enfants, où ai-je besoin d'une identité générée automatiquement par le parent pour être utilisée par l'enfant? –