I'm following Steve Sanderson's example from this ASP.NET MVC book sur la création d'un modèle à la main au lieu d'utiliser des outils de création de diagrammes pour le faire pour moi. Donc, dans mon espace de noms de modèle que je place une classe appelée MySystemModel
avec quelque chose comme ce qui suit dans ceIMultipleResults Utilisation du modèle personnalisé et du référentiel
[Table(Name="tblCC_Business")]
public class Business
{
[Column(IsPrimaryKey=true, IsDbGenerated=false)]
public string BusinessID { get; set; }
// this is done because Business column and Business have interfering names
[Column(Name="Business")] public string BusinessCol { get; set; }
}
Cette partie est tout va bien. Le problème est cependant de renvoyer plusieurs ensembles de résultats à partir d'une procédure stockée, mais de mélanger et de mettre en correspondance SQL avec la modélisation LINQ. Nous faisons cela parce que la traduction de LINQ to SQL est trop lente pour certaines de nos requêtes (il n'y a vraiment aucun intérêt à argumenter ici, c'est une exigence commerciale). Donc, fondamentalement, j'utilise des instructions SQL réels ainsi que mes modèles LINQ dans mon « dépôt » comme ceci:
public IEnumerable<MyType> ListData(int? arg)
{
string query = "SELECT * FROM MyTable WHERE argument = {0}";
return _dc.ExecuteQuery<MyType>(query, arg);
//c.GetTable<MyType>(); <-- this is another way of getting all data out quickly
}
Maintenant, le problème que je vais avoir est de savoir comment retourner plusieurs jeux de résultats que je ne suis pas étendre DataContext, comme si:
public ContractsControlRepository()
{
_dc = new DataContext(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString());
}
This link décrit comment plusieurs ensembles de résultats sont renvoyés par les procédures stockées.
[Function(Name="dbo.VariableResultShapes")]
[ResultType(typeof(VariableResultShapesResult1))]
[ResultType(typeof(VariableResultShapesResult2))]
public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
return ((IMultipleResults)(result.ReturnValue));
}
Comment puis-je transformer cela en quelque chose qui peut être utilisé par mon dépôt? Je dois juste être capable de renvoyer plusieurs ensembles de résultats à partir d'un référentiel qui contient DataContext, et ne l'étend pas. Si vous avez copié et collé l'extrait précédent dans un dépôt comme je l'ai, il indiquera simplement comment ExecuteMethodCall
n'est pas disponible, mais ce n'est disponible que si vous étendez DataContext
.
Ressources