プロパティ ウィンドウに新しいプロパティを追加する EF デザイナー用の小さな拡張機能を作成しました。vsix プロジェクト (新しいプロジェクト -> c# -> 拡張性 -> vsix プロジェクト) を使用してこれを行いました。F5 キーを押すと、実験的な VS インスタンスが起動します。新しいプロジェクトを作成し、エンティティ データ モデルを追加して、エンティティを追加します。しかし、私のブレークポイントはヒットせず、プロパティが表示されません。私が間違っているかもしれないことについてのアイデアはありますか?
public class AggregateRootValue
{
internal static XName AggregateRootElementName = XName.Get("AggregateRoot", "http://efex");
private readonly XElement _property;
private readonly PropertyExtensionContext _context;
public AggregateRootValue(XElement parent, PropertyExtensionContext context)
{
_property = parent;
_context = context;
}
[DisplayName("Aggregate Root")]
[Description("Determines if an entity is an Aggregate Root")]
[Category("Extensions")]
[DefaultValue(true)]
public string AggregateRoot
{
get
{
XElement child = _property.Element(AggregateRootElementName);
return (child == null) ? bool.TrueString : child.Value;
}
set
{
using (EntityDesignerChangeScope scope = _context.CreateChangeScope("Set AggregateRoot"))
{
var element = _property.Element(AggregateRootElementName);
if (element == null)
_property.Add(new XElement(AggregateRootElementName, value));
else
element.SetValue(value);
scope.Complete();
}
}
}
}
[Export(typeof(IEntityDesignerExtendedProperty))]
[EntityDesignerExtendedProperty(EntityDesignerSelection.ConceptualModelEntityType)]
public class AggregateRootFactory : IEntityDesignerExtendedProperty
{
public object CreateProperty(XElement element, PropertyExtensionContext context)
{
var edmXName = XName.Get("Key", "http://schemas.microsoft.com/ado/2008/09/edm");
var keys = element.Parent.Element(edmXName).Elements().Select(e => e.Attribute("Name").Value);
if (keys.Contains(element.Attribute("Name").Value))
return new AggregateRootValue(element, context);
return null;
}
}
編集: コードを Github に置きました: https://github.com/devlife/Sandbox
編集: 提案されたように MEF コンポーネントをマニフェストに追加した後、拡張機能はまだ読み込まれません。マニフェストの写真は次のとおりです。