mvc 3プロジェクトがあり、SQLデータベースにxmlファイルのデータを入力する必要があります。そこで、コンソールアプリプロジェクトをソリューションに追加し、必要なすべてのデータを画面に表示するコードを記述しました。次に、データベースにデータを書き込みます。コードのチャンクは次のとおりです:(コンソールアプリから)
public static void Main()
{
IKernel ninjectKernel = new StandardKernel();
ninjectKernel.Bind<IItemsRepository>().To<ItemsRepository>();
ninjectKernel.Bind<IProductRepository>().To<ProductRepository>();
ninjectKernel.Bind<IShippingRepository>().To<ShippingRepository>();
var itemsRepository = ninjectKernel.Get<IItemsRepository>(); // redirection to datacontext file
var productRepository = ninjectKernel.Get<IProductRepository>();
var shippingRepository = ninjectKernel.Get<IShippingRepository>();
var doc = XDocument.Load(@"C:\div_kid.xml");
var offers = doc.Descendants("offer");
foreach (var offer in offers)
{ // here I use Linq to XML to get all needed data from xml file:
// name, description, price, category, shippingCost, shippingDetails
Product product = productRepository.CreateProduct(name, description, price, category, "Not Specified", "Not Specified");
Shipping shipping = shippingRepository.CreateShipping(shippingCost, shippingDetails);
// here I think I will just create "admin" user and assign its "UserId" to "userId"
Guid? userId = null;
Item item = itemsRepository.CreateItem(product.ProductId, shipping.ShippingId, (Guid) userId, DateTime.Now);
// Resharper highlights this line like unreachable. Why?
Console.WriteLine("name: {0}", offer.Element("name").Value);
}
}
まず、コンソールアプリを実行すると、次の行のMvcProjectName.Designer.csファイルでNullReferenceExceptionが発生します。
public WebStoreDataContext() :
base(global::System.Configuration.ConfigurationManager.ConnectionStrings["WebStoreConnectionString"].ConnectionString, mappingSource)
NullReferenceException:オブジェクトへの参照がオブジェクトインスタンスを指していません。
だから、私はたくさんの質問があります:
1)コンソールアプリコードをmvc 3アプリコードと1つのソリューションで統合するにはどうすればよいですか?
2) stackoverflowに関するこの投稿も見つけました。しかし、ConsoleProjectの参照にMvcProjectへの参照を追加することはできませんか?そして、この方法で「mvcリポジトリ」コードにアクセスできますか?
3)コンソールアプリでninjectコンテナを使用する必要がありますか?
4)xmlファイルからslqデータベースにデータをロードするより良い実装はありますか?私はこれまで1つのソリューションで2つのプロジェクトを行ったことがないので、この状況を美しく処理する方法は他にもありますか?
よろしくお願いします!
編集:
接続文字列を含むapp.configファイルを追加しました:
<add
name="WebStoreConnectionString" connectionString="Data Source=(LocalDB)\v11.0;
AttachDbFilename=|DataDirectory|\WebStore.mdf;Integrated Security=True;Connect Timeout=30"
providerName="System.Data.SqlClient"
/>
コンソールアプリを実行すると、Linq to SQLの「.submitChanges()」メソッドが呼び出されたときに次のSqlExceptionが発生します。
ファイルC:\ Users \ Aleksey \ repos \ working_copy \ WebStore \ LoadDataTool \ bin \ Debug\WebStore.mdfの自動名前付きデータベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、UNC共有にあります。
また、ディレクトリLoadDataTool \ bin \ Debugに、拡張子が「ProgramDebugDatabase」の「WebStore」ファイルが表示されました。