C# SQLite一对多

C# SQLite一对多,c#,entity-framework,sqlite,C#,Entity Framework,Sqlite,我有两门关于C#的课,都是“一对多”关系 public class LocalCompany : INotifyPropertyChanged { [Key] public int Id { get; set; } private bool isActive; public bool IsActive { get { return isActive; } set { isActive = value; OnPropertyChanged("IsActive");

我有两门关于C#的课,都是“一对多”关系

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));
    }
公共类LocalCompany:INotifyPropertyChanged
{
[关键]
公共int Id{get;set;}
私人住宅是活跃的;
public bool IsActive{get{return IsActive;}set{IsActive=value;OnPropertyChanged(“IsActive”);}
私有字符串名称;
公共字符串名称{get{return Name;}set{Name=value;OnPropertyChanged(“Name”);}
私有字符串地址;
公共字符串地址{get{return Address;}set{Address=value;OnPropertyChanged(“Address”);}
私有字符串unp;
公共字符串UNP{get{return UNP;}set{UNP=value;OnPropertyChanged(“UNP”);}
公共ICollection本地用户{get;set;}
公共重写字符串ToString()
{
返回名称;
}
公共事件属性更改事件处理程序属性更改;
公共无效OnPropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
PropertyChanged(此,新PropertyChangedEventArgs(prop));
}
}
公共类LocalUser:INotifyPropertyChanged
{
[关键]
公共int Id{get;set;}
私人住宅是活跃的;
public bool IsActive{get{return IsActive;}set{IsActive=value;OnPropertyChanged(“IsActive”);}
私人字符串电子邮件;
公共字符串Email{get{return Email;}set{Email=value;OnPropertyChanged(“Email”);}
私有字符串名称;
公共字符串名称{get{return Name;}set{Name=value;OnPropertyChanged(“Name”);}
私有字符串地址;
公共字符串地址{get{return Address;}set{Address=value;OnPropertyChanged(“Address”);}
私人字符串护照号码;
公共字符串PassportNumber{get{return PassportNumber;}set{PassportNumber=value;OnPropertyChanged(“PassportNumber”);}
私人字符串护照;
公共字符串PassportIssue{get{return PassportIssue;}set{PassportIssue=value;OnPropertyChanged(“PassportIssue”);}
公共ICollection LocalCards{get;set;}
public int?LocalCompanyId{get;set;}
私人本地公司本地公司;
public LocalCompany LocalCompany{get{return LocalCompany;}set{LocalCompany=value;OnPropertyChanged(“LocalCompany”);}
公共重写字符串ToString()
{
返回名称;
}
公共事件属性更改事件处理程序属性更改;
公共无效OnPropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
PropertyChanged(此,新PropertyChangedEventArgs(prop));
}
对于与数据库的交互,我使用实体框架6

  • 我正在创建名为“AAA”的LocalCompany项并将其保存到DB中。它被分配了一个Id“1”
  • 我正在创建名为“Alex”的LocalUser项,并在LocalCompany属性中写入company AAA
  • 但是,EF不会将1写入LocalCompanyId属性。EF创建第二个Id为“2”的AAA公司,并将2写入LocalCompanyId

    如果我写LocalCompanyId,那么我会得到相同的结果。 请告诉我我错在哪里?
    很抱歉英语不好。

    我发现了问题!这是因为我以前在LocalCompany属性中写入了company对象。现在我正在写入LocalCompanyId,没有向LocalCompany写入任何内容,外键是1,第二个company没有创建,所有工作都正常!))

    如果我写入LocalCompanyId,那么我会得到相同的结果。
    你能解释一下?如果你用LocalCompanyId=1创建一个新的LocalUser,我不相信EF会创建一个Id=2的LocalCompany。如果我将1写入LocalCompanyId,而不将任何内容写入LocalCompany,EF会创建第二个AAA公司,并使用“2”Id并将2写入LocalCompanyId与第一种情况类似。如果我将1写入LocalCompanyId并将company对象写入LocalCompany,EF将创建第二个AAA公司,并使用“2”Id,并将2写入LocalCompanyId。我发现了问题!这是因为我以前将company对象写入LocalCompany属性。我发现了问题!这是因为我以前将company对象写入LocalCompany属性。现在我正在写入LocalCompanyId,而不是将任何内容写入LocalCompany,外键为1,第二个company为不创建,一切正常!))