に失敗しますテーブル 'ABCDE.dbo.ServiceTypes';列 'ID'に値NULLを挿入できません。列はNULLを許可しません。 INSERTは失敗します。挿入は私が多対多の関係を持つEntity Frameworkのコードファーストプロジェクトに取り組んでいます多対多の関係
ServiceProvider.cs:
public partial class ServiceProvider
{
public ServiceProvider()
{
ServiceTypes = new HashSet<ServiceType>();
}
[Key]
public int ServiceProviderID { get; set; }
[Required]
[StringLength(100)]
public string Title { get; set; }
public virtual ICollection<ServiceType> ServiceTypes { get; set; }
public virtual IEnumerable<Service> Services { get; set; }
}
ServiceType.cs:
public partial class ServiceType
{
public ServiceType(ServiceTypeEnum @enum)
{
ID = (int) @enum;
Name = @enum.ToString();
}
protected ServiceType() { } // For EF
//[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
public virtual ICollection<ServiceProvider> ServiceProviders { get; set; }
public static implicit operator ServiceType(ServiceTypeEnum @enum) => new ServiceType(@enum);
public static implicit operator ServiceTypeEnum(ServiceType serviceType) => (ServiceTypeEnum) serviceType.ID;
}
public enum ServiceTypeEnum
{
Ambulance = 1,
[Display(Name = "Cash Advance")]
CashAdvance = 2,
Hospitalization = 3,
Hotel = 4,
[Display(Name = "House Call")]
HouseCall = 5,
[Display(Name = "Medical Escort")]
MedicalEscort = 6,
Transfer = 7,
Repatriation = 8
}
とServiceProviderController.csを次のように
エンティティとコントローラクラスがあります:(自動EFによって生成された)データベーステーブルServiceTypeServiceProvidersは、正しいデータが取り込まれていない理由を
public ActionResult Create()
{
var _allServiceTypes = Enum.GetValues(typeof(ServiceTypeEnum))
.Cast<ServiceTypeEnum>()
.Select(t => new KeyValuePair<string, int>(t.ToString(), (int) t));
var viewModel = new ServiceProviderViewModel.CreateModel()
{
AllServiceTypes = _allServiceTypes
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(ServiceProviderViewModel.CreateModel viewModel)
{
if (ModelState.IsValid)
{
var serviceProvider = new ServiceProvider();
serviceProvider.Title = viewModel.Title;
repository.InsertServiceProvider(serviceProvider);
for (int i = 0; i < viewModel.SelectedServiceTypes.Length; i++)
{
var _serviceType = new ServiceType((ServiceTypeEnum)Enum.Parse(typeof(ServiceTypeEnum), viewModel.SelectedServiceTypes[i].ToString()));
serviceProvider.ServiceTypes.Add(_serviceType);
}
repository.Save();
return RedirectToAction("Index");
}
return View(viewModel);
}
私はわかりません。それには何も格納されません。デバッグしながら、サービス・プロバイダのオブジェクトを見て、私はすべてが正常であると考えられることがわかります(下の画像を参照)
私は
(列挙型に一致する)は、次のデータを使用して手動でサービス種別テーブルを埋め
にあなたがのServiceProviderエンティティを追加する方法のより良いアイデアを得るためにInsertServiceProviderのコードを参照してくださいする必要があります、彼らは保管されていますか? –
いいえ、それらは保存されていません... – burakk
そこには 'SaveChanges'呼び出しはありますか?あるいは間違ったデータベースを見ているのでしょうか? –