1

我有两个类:LicenseType 和 EntityType。

[Table("LicenseType")]
public class LicenseType : ComplianceBase, INotifyPropertyChanged
{

    private List<Certification> _certifications = new List<Certification>();
    private List<EntityType> _entityTypes = new List<EntityType>();

    public List<EntityType> EntityTypes
    {
        get { return _entityTypes; }
        set { _entityTypes = value; }
    }

    public List<Certification> Certifications
    {
        get { return _certifications; }
        set { _certifications = value; }
    }
}

[Table("EntityType")]
public class EntityType : ComplianceBase, INotifyPropertyChanged
{
    private List<LicenseType> _licenseTypes = new List<LicenseType>();

    public List<LicenseType> LicenseTypes
    {
        get { return _licenseTypes; }
        set
        {
            _licenseTypes = value;
            //  OnPropertyChanged();
        }
    }
}

两者都来自ComplianceBase,

public class ComplianceBase
{
    private int _id;
    private string _name;
    private string _description;


    public string Description
    {
        get { return _description; }
        set
        {
            if (_description == value) return;
            _description = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public int Id
    {
        get { return _id; }
        set
        {
            if (value == _id) return;
            _id = value;
            OnPropertyChanged();
        }
    }

    public string Name
    {
        get { return _name; }
        set
        {
            if (value == _name) return;
            _name = value;
            OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

我想要做的是将 EntityType 与一个或多个 LicenseTypes 相关联,例如,EntityType“Primary Lender”可以与两个 LicenseTypes,“Lender License”和“Mortgage License”相关联。在这种情况下,我想要 EntityType 表中的一条记录“Primary Lender”和我的 LicenseType 表中的两条记录:“Lender License”和“Mortgage License”。

将相关 LicenseTypes 添加到我的 EntityType 的代码是通过调用完成的:

_currentEntity.LicenseTypes.Add(licenseType);

然后打电话_context.SaveChanges()

还有一个附加表“EntityTypeLicenseTypes”用作关联这两个表的查找表。有两条记录将 EntityType 与两个相关的 LicenseType 连接起来。

这有效。但是,我的代码还添加(它复制)LicenseType 记录,并将其添加到正在关联的那些记录的 LicenseType 表中。

我怎样才能阻止这种情况发生?

4

1 回答 1

0

为了避免重复,您必须将 附加licenseType上下文中:

_context.LicenseTypes.Attach(licenseType);
_currentEntity.LicenseTypes.Add(licenseType);
_context.SaveChanges();
于 2013-02-21T17:22:21.473 回答