2017-07-30 12 views
2

私は「1対多数」の関係を持つC#で2つのクラスを持っています。SQLite one-to-many

public class LocalCompany : INotifyPropertyChanged 
{ 
    [Key] 
    public int Id { get; set; } 

    private bool isActive; 
    public bool IsActive { get { return isActive; } set { isActive = value; OnPropertyChanged("IsActive"); } } 

    private string name; 
    public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } 

    private string address; 
    public string Address { get { return address; } set { address = value; OnPropertyChanged("Address"); } } 

    private string unp; 
    public string UNP { get { return unp; } set { unp = value; OnPropertyChanged("UNP"); } } 
    public ICollection<LocalUser> LocalUsers { get; set; } 

    public override string ToString() 
    { 
     return Name; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(string prop) 
    { 

     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
    } 
} 

public class LocalUser : INotifyPropertyChanged 
{ 
    [Key] 
    public int Id { get; set; } 

    private bool isActive; 
    public bool IsActive { get { return isActive; } set { isActive = value; OnPropertyChanged("IsActive"); } } 

    private string email; 
    public string Email { get { return email; } set { email = value; OnPropertyChanged("Email"); } } 

    private string name; 
    public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } 

    private string address; 
    public string Address { get { return address; } set { address = value; OnPropertyChanged("Address"); } } 

    private string passportNumber; 
    public string PassportNumber { get { return passportNumber; } set { passportNumber = value; OnPropertyChanged("PassportNumber"); } } 

    private string passportIssue; 
    public string PassportIssue { get { return passportIssue; } set { passportIssue = value; OnPropertyChanged("PassportIssue"); } } 

    public ICollection<LocalCard> LocalCards { get; set; } 

    public int? LocalCompanyId { get; set; } 
    private LocalCompany localCompany; 
    public LocalCompany LocalCompany { get { return localCompany; } set { localCompany = value; OnPropertyChanged("LocalCompany"); } } 

    public override string ToString() 
    { 
     return Name; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(string prop) 
    { 

     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
    } 

は、データベースとの相互作用のために私は、Entity Frameworkの6

  1. は、私が "AAA" の名前でLocalCompany項目を作成し、DBに保存しています。これにはId "1"が割り当てられます。
  2. "Alex"という名前のLocalUserアイテムを作成しています.LocalCompanyプロパティに会社AAAを記述しています。

ただし、EFはLocalCompanyIdプロパティに1を書き込んでいません。 EFは "2"のIDを持つ第2のAAA会社を作成し、2をLocalCompanyIdに書き込みます。

LocalCompanyIdを書いても同じ結果が得られます。 私の間違いは何ですか? 悪い英語を申し訳ありません。

+0

'LocalCompanyIdを書くと同じ結果になります。 LocalCompanyId = 1の新しいLocalUserを作成した場合、EFがId = 2のLocalCompanyを作成したとは思わない。 – oerkelens

+0

LocalCompanyIdに1を書き込んでLocalCompanyに何も書き込まないと、2番目のAAA会社最初のケースのように2をLocalCompanyIdに書き込む。 LocalCompanyIdに1を書き込み、会社オブジェクトをLocalCompanyに書き込むと、EFは2番目のIdA会社を作成し、2をLocalCompanyIdに書き込むことになります。 – Phenman

+0

問題が見つかりました!私は企業オブジェクトをLocalCompanyプロパティに書き込む前に問題があります。 – Phenman

答えて

0

問題が見つかりました!私は企業オブジェクトをLocalCompanyプロパティに書き込む前に問題があります。今私はLocalCompanyIdを書いていて、LocalCompanyにanythyngを書くのではなく、外部キーは1で、第2の会社は作成されておらず、すべて正常に動作します!))))