2

UserCompany単一のメソッドを使用してオブジェクトをデータベースに挿入したいと考えています。この関数に要素を渡すなどして、それを「右のテーブルに挿入」します。

通常、エンティティ (LINQ to XML など) では、次のようなことを行います。

db.Company.UsersCompany.Add(UserCompany);
db.SubmitChanges();

しかし、ここでの問題は、を使用する前にテーブルを指定する必要があることUsersCompanyです。オブジェクト/テーブルの各タイプの挿入に対して1つの関数を実行したいので、これを取り除きたいです。持つなど:Company.Add()

UserCompany.InsertMySelf();

また

db.SmartAdd(UserCompany);

そして、テーブルをどこにどのように自動的に挿入するかを知っています。

これを行うことは可能ですか?何か戦略はありますか?

4

3 に答える 3

1

Controller次の行に沿って自分用のリポジトリを定義します。

public class CompanyController : ApiController
{
    private readonly CompanyRepository _companyRepository;

    public CompanyController()
    {
        _companyRepository= new CompanyRepository(User);
    }

    [HttpPost]
    public Company PostCompany(Company comp)
    {
        _companyRepository.SmartAdd(comp);
    }
}

次の定義でリポジトリを定義します。

public class CompanyRepository : EFContextProvider<CompanyContext>
{
    // Fields which can be used for security within the repository.
    public IPrincipal User { get; private set; }
    public string UserName { get; set; }

    public CompanyRepository (IPrincipal user)
    {
        User = user;
        UserName = user.Identity.Name;
    }

    public DbQuery<Object> SmartAdd(Object obj)
    {
        switch (obj.GetType)
        {
            case "":  // TODO...
              Context.Company.UsersCompany.Add(UserCompany);
                break;

            default:
                break;
        }
    }

独自のニーズに合わせて調整する必要がありますが、これが一般的な考え方です。

スイッチ内には多くのケースが存在する可能性がありますが、オブジェクトの検証やその他のことは関係なく行うと想定しているため、ここでも簡単に行うことができます。

関連リンク:

于 2013-10-03T13:35:36.033 に答える