0

私はC#ASP.NET MVCを使用してエンタープライズWeb開発プロジェクトに取り組んでおり、それらからの1つの要件は、エンティティ間の動的な関係に加えて、動的な属性を持つことです。そのため、SQLスキーマ/ ORMクラスを変更する手間をかけずに、属性/関係を変更できるようにしたいと考えています。LINQ-to-SQLを使用しています。

だから私の質問は; それを実装するための最良の方法は何でしょうか?

4

1 に答える 1

1
void Main()
{
    var db =      @"<root>
                        <entities>
                            <entity id='1' name='tim'/>
                            <entity id='2' name='Gaui'/>
                        </entities>
                        <properties>
                            <property id='1' entityid='1' name='Age' value='46'/>
                            <property id='2' entityid='1' name='Country' value='Australia'/>
                            <property id='3' entityid='2' name='StackoverflowRep' value='17'/>
                        </properties>
                    </root>";
    var doc = XElement.Parse(db);
    var ents = from e in doc.Descendants("entity")
                select new Entity()
                {
                    id = (int)e.Attribute("id"),
                    name = (string)e.Attribute("name"),
                    Properties = doc.Descendants("property")
                                    .Where(p => (int)p.Attribute("entityid") == (int)e.Attribute("id"))
                                    .Select( p => new { name = (string)p.Attribute("name") , value = (string)p.Attribute("value")})
                                    .ToDictionary(k => k.name, v => v.value)
                };
    ents.Dump();                
}


public class Entity
{
    public int id {get;set;}
    public string name {get;set;}
    public IDictionary<string, string> Properties {get;set;}
}

// You can run this spike in LinqPad (language c# Program)

// In this example I just have a simple master detail, and the assumtion is that the name/value pairs are strings. 
// In a real app you probably would have another table with property types, something like...

//<propertytypes>
//  <propertytype id='1' Name='Country' type='string'>
//  ....etc
//  </propertytype>
//</propertytypes>

// and in the properties table you would join to this instead.

// This would give you the data types, plus the ability to 
// populate a list of allowed properties etc.
于 2012-08-21T23:42:14.837 に答える