Ado.Net Entity Framework Code Only avec le service de données Ado.Net
-
05-07-2019 - |
Question
J'utilise la pré-version d'Ado.Net et je ne comprends pas comment l'utiliser avec Ado.Net Data Service.
Code de l'objet ObjectContext
public class TradingContext : ObjectContext
{
private static TradingContext _Context;
public static TradingContext Current
{
get
{
if (_Context == null)
{
_Context = BuildContext();
}
return _Context;
}
}
public TradingContext(EntityConnection conn) : base(conn)
{
}
public IObjectSet<Message> Messages
{
get { return CreateObjectSet<Message>(); }
}
private static TradingContext BuildContext()
{
var builder = new ContextBuilder<TradingContext>();
builder.Entity<Message>().Property(x => x.MessageId).IsIdentity();
builder.Entity<Message>().Property(x => x.Xml).HasStoreType("xml");
return builder.Create(new SqlConnection(@"connection string information"));
}
Et le code du service de données Ado.Net
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Trading : DataService<TradingContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
Le problème est que Ado.Net Data Service attend un constructeur sans paramètre. Et si je fournis un constructeur, que vais-je écrire au constructeur de base?
Et même si je spécifie le constructeur de base, le contexte n'est pas complet sans BuildContext
Qu'est-ce que j'ai manqué ou n'est pas Entity Framework " code only " non pris en charge avec Ado.Net Data Service dans cette pré-version?
La solution
Vous pouvez remplacer la méthode protégée CreateDataSource () sur votre classe dataservice et renvoyer l'instance de ObjectContext. Cela permet au scénario dans lequel le constructeur du fournisseur sous-jacent (dans ce cas, EF) utilise un grand nombre de constructeurs.
J'espère que cela vous aidera.
Merci Pratik